diff --git a/src/guiengine/event_handler.cpp b/src/guiengine/event_handler.cpp index 23a9caa5a..777f76bf5 100644 --- a/src/guiengine/event_handler.cpp +++ b/src/guiengine/event_handler.cpp @@ -79,7 +79,7 @@ EventPropagation EventHandler::onGUIEvent(const SEvent& event) case EGET_LISTBOX_SELECTED_AGAIN: { Widget* w = GUIEngine::getWidget(id); - if(w == NULL) break; + if (w == NULL) break; // FIXME: don't hardcode player 0 return onWidgetActivated(w, 0); @@ -157,7 +157,7 @@ EventPropagation EventHandler::onWidgetActivated(GUIEngine::Widget* w, const int { if (ModalDialog::isADialogActive()) { - if (ModalDialog::getCurrent()->processEvent(w->m_properties[PROP_ID])) return EVENT_LET; + if (ModalDialog::getCurrent()->processEvent(w->m_properties[PROP_ID]) == EVENT_BLOCK) return EVENT_BLOCK; if (w->m_event_handler == NULL) return EVENT_LET; } @@ -295,7 +295,8 @@ void EventHandler::processAction(const int action, const unsigned int value, Inp { IGUIElement* element = GUIEngine::getGUIEnv()->getFocus(); Widget* w = GUIEngine::getWidget( element->getID() ); - if(w == NULL) break; + if (w == NULL) break; + // FIXME : consider returned value? onWidgetActivated( w, playerID ); } diff --git a/src/guiengine/event_handler.hpp b/src/guiengine/event_handler.hpp index c25108faf..df644e67d 100644 --- a/src/guiengine/event_handler.hpp +++ b/src/guiengine/event_handler.hpp @@ -41,7 +41,7 @@ namespace GUIEngine * mainly through AbstractStateManager, and also to widgets (this class is some kind of bridge between * the base irrLicht GUI engine and the STK layer on top of it) */ - class EventHandler : public irr::IEventReceiver +class EventHandler : public irr::IEventReceiver { EventPropagation onGUIEvent(const irr::SEvent& event); EventPropagation onWidgetActivated(Widget* w, const int playerID); diff --git a/src/guiengine/modaldialog.hpp b/src/guiengine/modaldialog.hpp index a47beff22..725f6d1bf 100644 --- a/src/guiengine/modaldialog.hpp +++ b/src/guiengine/modaldialog.hpp @@ -20,6 +20,7 @@ #include "irrlicht.h" #include "utils/ptr_vector.hpp" +#include "guiengine/event_handler.hpp" #include "guiengine/skin.hpp" class PlayerProfile; @@ -55,8 +56,8 @@ public: virtual ~ModalDialog(); - /** Returns whether to block event propagation */ - virtual bool processEvent(std::string& eventSource){ return false; } + /** Returns whether to block event propagation (usually, you will want to block events you processed) */ + virtual EventPropagation processEvent(std::string& eventSource){ return EVENT_LET; } static void dismiss(); static void onEnterPressed(); diff --git a/src/states_screens/dialogs/enter_player_name_dialog.cpp b/src/states_screens/dialogs/enter_player_name_dialog.cpp index 286112b07..a996c7026 100644 --- a/src/states_screens/dialogs/enter_player_name_dialog.cpp +++ b/src/states_screens/dialogs/enter_player_name_dialog.cpp @@ -81,14 +81,14 @@ EnterPlayerNameDialog::~EnterPlayerNameDialog() { textCtrl->getIrrlichtElement()->remove(); } -bool EnterPlayerNameDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation EnterPlayerNameDialog::processEvent(std::string& eventSource) { if(eventSource == "cancel") { dismiss(); - return true; + return GUIEngine::EVENT_BLOCK; } - return false; + return GUIEngine::EVENT_LET; } void EnterPlayerNameDialog::onEnterPressedInternal() { diff --git a/src/states_screens/dialogs/enter_player_name_dialog.hpp b/src/states_screens/dialogs/enter_player_name_dialog.hpp index f6cb91dcb..42d4ec70f 100644 --- a/src/states_screens/dialogs/enter_player_name_dialog.hpp +++ b/src/states_screens/dialogs/enter_player_name_dialog.hpp @@ -39,7 +39,7 @@ public: ~EnterPlayerNameDialog(); void onEnterPressedInternal(); - bool processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(std::string& eventSource); }; #endif diff --git a/src/states_screens/dialogs/player_info_dialog.cpp b/src/states_screens/dialogs/player_info_dialog.cpp index bce75c113..c2685d378 100644 --- a/src/states_screens/dialogs/player_info_dialog.cpp +++ b/src/states_screens/dialogs/player_info_dialog.cpp @@ -182,7 +182,7 @@ void PlayerInfoDialog::onEnterPressedInternal() { } // ------------------------------------------------------------------------------------------------------ -bool PlayerInfoDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation PlayerInfoDialog::processEvent(std::string& eventSource) { if (eventSource == "renameplayer") { @@ -201,12 +201,12 @@ bool PlayerInfoDialog::processEvent(std::string& eventSource) ModalDialog::dismiss(); dismiss(); - return true; + return GUIEngine::EVENT_BLOCK; } else if (eventSource == "removeplayer") { showConfirmDialog(); - return true; + return GUIEngine::EVENT_BLOCK; } else if (eventSource == "confirmremove") { @@ -218,12 +218,12 @@ bool PlayerInfoDialog::processEvent(std::string& eventSource) GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); ModalDialog::dismiss(); - return true; + return GUIEngine::EVENT_BLOCK; } else if(eventSource == "cancelremove") { showRegularDialog(); - return true; + return GUIEngine::EVENT_BLOCK; } else if(eventSource == "cancel") { @@ -233,7 +233,7 @@ bool PlayerInfoDialog::processEvent(std::string& eventSource) GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); ModalDialog::dismiss(); - return true; + return GUIEngine::EVENT_BLOCK; } - return false; + return GUIEngine::EVENT_LET; } diff --git a/src/states_screens/dialogs/player_info_dialog.hpp b/src/states_screens/dialogs/player_info_dialog.hpp index 121915258..69098fc54 100644 --- a/src/states_screens/dialogs/player_info_dialog.hpp +++ b/src/states_screens/dialogs/player_info_dialog.hpp @@ -41,7 +41,7 @@ public: PlayerInfoDialog(PlayerProfile* PlayerInfoDialog, const float percentWidth, const float percentHeight); void onEnterPressedInternal(); - bool processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(std::string& eventSource); }; diff --git a/src/states_screens/dialogs/press_a_key_dialog.cpp b/src/states_screens/dialogs/press_a_key_dialog.cpp index 70580d253..c39ddb355 100644 --- a/src/states_screens/dialogs/press_a_key_dialog.cpp +++ b/src/states_screens/dialogs/press_a_key_dialog.cpp @@ -57,13 +57,13 @@ PressAKeyDialog::PressAKeyDialog(const float w, const float h) : widget2->add(); } // ------------------------------------------------------------------------------------------------------ -bool PressAKeyDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation PressAKeyDialog::processEvent(std::string& eventSource) { if(eventSource == "cancel") { input_manager->setMode(InputManager::MENU); dismiss(); - return true; + return GUIEngine::EVENT_BLOCK; } - return false; + return GUIEngine::EVENT_LET; } diff --git a/src/states_screens/dialogs/press_a_key_dialog.hpp b/src/states_screens/dialogs/press_a_key_dialog.hpp index e89fb0d68..a19ff5561 100644 --- a/src/states_screens/dialogs/press_a_key_dialog.hpp +++ b/src/states_screens/dialogs/press_a_key_dialog.hpp @@ -28,7 +28,7 @@ public: * Creates a modal dialog with given percentage of screen width and height */ PressAKeyDialog(const float percentWidth, const float percentHeight); - bool processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(std::string& eventSource); }; #endif diff --git a/src/states_screens/dialogs/race_over_dialog.cpp b/src/states_screens/dialogs/race_over_dialog.cpp index 8c4c33616..44031f15a 100644 --- a/src/states_screens/dialogs/race_over_dialog.cpp +++ b/src/states_screens/dialogs/race_over_dialog.cpp @@ -241,7 +241,7 @@ void RaceOverDialog::onEnterPressedInternal() { } -bool RaceOverDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation RaceOverDialog::processEvent(std::string& eventSource) { if (eventSource == "raceagainbtn") { @@ -249,7 +249,7 @@ bool RaceOverDialog::processEvent(std::string& eventSource) network_manager->setState(NetworkManager::NS_MAIN_MENU); RaceManager::getWorld()->unpause(); race_manager->rerunRace(); - return true; + return GUIEngine::EVENT_BLOCK; } else if (eventSource == "newracebtn") { @@ -258,7 +258,7 @@ bool RaceOverDialog::processEvent(std::string& eventSource) race_manager->exitRace(); StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); StateManager::get()->pushScreen(KartSelectionScreen::getInstance()); - return true; + return GUIEngine::EVENT_BLOCK; } else if (eventSource == "backtomenu") { @@ -267,16 +267,16 @@ bool RaceOverDialog::processEvent(std::string& eventSource) race_manager->exitRace(); StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); input_manager->setMode(InputManager::MENU); - return true; + return GUIEngine::EVENT_BLOCK; } else if (eventSource == "continuegp") { ModalDialog::dismiss(); RaceManager::getWorld()->unpause(); race_manager->next(); - return true; + return GUIEngine::EVENT_BLOCK; } - return false; + return GUIEngine::EVENT_LET; } diff --git a/src/states_screens/dialogs/race_over_dialog.hpp b/src/states_screens/dialogs/race_over_dialog.hpp index 37db35f44..300a33e78 100644 --- a/src/states_screens/dialogs/race_over_dialog.hpp +++ b/src/states_screens/dialogs/race_over_dialog.hpp @@ -30,7 +30,7 @@ public: RaceOverDialog(const float percentWidth, const float percentHeight); void onEnterPressedInternal(); - bool processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(std::string& eventSource); }; diff --git a/src/states_screens/dialogs/race_paused_dialog.cpp b/src/states_screens/dialogs/race_paused_dialog.cpp index c1ad92a32..44a43ad48 100644 --- a/src/states_screens/dialogs/race_paused_dialog.cpp +++ b/src/states_screens/dialogs/race_paused_dialog.cpp @@ -214,7 +214,7 @@ void RacePausedDialog::onEnterPressedInternal() { } -bool RacePausedDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation RacePausedDialog::processEvent(std::string& eventSource) { std::cout << "RacePausedDialog::processEvent(" << eventSource.c_str() << ")\n"; @@ -222,7 +222,7 @@ bool RacePausedDialog::processEvent(std::string& eventSource) { // unpausing is done in the destructor so nothing more to do here ModalDialog::dismiss(); - return true; + return GUIEngine::EVENT_BLOCK; } else if (eventSource == "choiceribbon") { @@ -235,19 +235,19 @@ bool RacePausedDialog::processEvent(std::string& eventSource) race_manager->exitRace(); StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); input_manager->setMode(InputManager::MENU); - return true; + return GUIEngine::EVENT_BLOCK; } else if (selection == "help") { dismiss(); StateManager::get()->pushScreen(HelpScreen1::getInstance()); - return true; + return GUIEngine::EVENT_BLOCK; } else if (selection == "options") { dismiss(); StateManager::get()->pushScreen(OptionsScreenAV::getInstance()); - return true; + return GUIEngine::EVENT_BLOCK; } else if (selection == "restart") { @@ -255,14 +255,14 @@ bool RacePausedDialog::processEvent(std::string& eventSource) network_manager->setState(NetworkManager::NS_MAIN_MENU); RaceManager::getWorld()->unpause(); race_manager->rerunRace(); - return true; + return GUIEngine::EVENT_BLOCK; } else if (selection == "newrace") { - // TODO + return GUIEngine::EVENT_BLOCK; } } - return false; + return GUIEngine::EVENT_LET; } RacePausedDialog::~RacePausedDialog() diff --git a/src/states_screens/dialogs/race_paused_dialog.hpp b/src/states_screens/dialogs/race_paused_dialog.hpp index ac4de1dbc..7e496e71c 100644 --- a/src/states_screens/dialogs/race_paused_dialog.hpp +++ b/src/states_screens/dialogs/race_paused_dialog.hpp @@ -36,7 +36,7 @@ public: virtual ~RacePausedDialog(); void onEnterPressedInternal(); - bool processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(std::string& eventSource); }; #endif diff --git a/src/states_screens/dialogs/track_info_dialog.cpp b/src/states_screens/dialogs/track_info_dialog.cpp index 208536d78..5644b799a 100644 --- a/src/states_screens/dialogs/track_info_dialog.cpp +++ b/src/states_screens/dialogs/track_info_dialog.cpp @@ -233,13 +233,13 @@ void TrackInfoDialog::onEnterPressedInternal() startGame(m_track_ident, num_laps); } // ------------------------------------------------------------------------------------------------------ -bool TrackInfoDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation TrackInfoDialog::processEvent(std::string& eventSource) { if (eventSource == "start" ) { const int num_laps = m_spinner->getValue(); startGame(m_track_ident, num_laps); - return true; + return GUIEngine::EVENT_BLOCK; } - return false; + return GUIEngine::EVENT_LET; } diff --git a/src/states_screens/dialogs/track_info_dialog.hpp b/src/states_screens/dialogs/track_info_dialog.hpp index 6995621dd..4a978cb4e 100644 --- a/src/states_screens/dialogs/track_info_dialog.hpp +++ b/src/states_screens/dialogs/track_info_dialog.hpp @@ -42,7 +42,7 @@ public: TrackInfoDialog(const std::string& trackIdent, const irr::core::stringw& trackName, irr::video::ITexture* screenshot, const float percentWidth, const float percentHeight); void onEnterPressedInternal(); - bool processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(std::string& eventSource); }; #endif