From 93c12ead0801f8ad8524f6d311b22ae63fbacbd9 Mon Sep 17 00:00:00 2001 From: auria Date: Wed, 24 Feb 2010 22:08:41 +0000 Subject: [PATCH] Fixed const correctness issue with class ModalDialog + fixed behaviour when pressing ESC in race over dialog git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@4829 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/guiengine/modaldialog.hpp | 5 +- .../dialogs/add_device_dialog.cpp | 2 +- .../dialogs/add_device_dialog.hpp | 2 +- .../dialogs/confirm_resolution_dialog.cpp | 2 +- .../dialogs/confirm_resolution_dialog.hpp | 2 +- .../dialogs/enter_player_name_dialog.cpp | 2 +- .../dialogs/enter_player_name_dialog.hpp | 2 +- src/states_screens/dialogs/gp_info_dialog.cpp | 2 +- src/states_screens/dialogs/gp_info_dialog.hpp | 2 +- .../dialogs/player_info_dialog.cpp | 2 +- .../dialogs/player_info_dialog.hpp | 2 +- .../dialogs/press_a_key_dialog.cpp | 2 +- .../dialogs/press_a_key_dialog.hpp | 2 +- .../dialogs/race_over_dialog.cpp | 98 ++++--------------- .../dialogs/race_over_dialog.hpp | 4 +- .../dialogs/race_paused_dialog.cpp | 2 +- .../dialogs/race_paused_dialog.hpp | 2 +- .../dialogs/track_info_dialog.cpp | 2 +- .../dialogs/track_info_dialog.hpp | 2 +- src/states_screens/state_manager.cpp | 2 +- 20 files changed, 45 insertions(+), 96 deletions(-) diff --git a/src/guiengine/modaldialog.hpp b/src/guiengine/modaldialog.hpp index d39a6b1cb..f2a7d9e4c 100644 --- a/src/guiengine/modaldialog.hpp +++ b/src/guiengine/modaldialog.hpp @@ -57,7 +57,7 @@ public: virtual ~ModalDialog(); /** Returns whether to block event propagation (usually, you will want to block events you processed) */ - virtual EventPropagation processEvent(std::string& eventSource){ return EVENT_LET; } + virtual EventPropagation processEvent(const std::string& eventSource){ return EVENT_LET; } bool isMyChild(Widget* widget) const { return m_children.contains(widget); } bool isMyChild(irr::gui::IGUIElement* widget) const { return m_irrlicht_window->isMyChild(widget); } @@ -75,6 +75,9 @@ public: static ModalDialog* getCurrent(); static bool isADialogActive(); + /** Override to change what happens on escape pressed */ + virtual void escapePressed() { dismiss(); } + /** Override to be notified of updates */ virtual void onUpdate(float dt) { } }; diff --git a/src/states_screens/dialogs/add_device_dialog.cpp b/src/states_screens/dialogs/add_device_dialog.cpp index 5d25a66c7..ae509c5a7 100644 --- a/src/states_screens/dialogs/add_device_dialog.cpp +++ b/src/states_screens/dialogs/add_device_dialog.cpp @@ -96,7 +96,7 @@ void AddDeviceDialog::onEnterPressedInternal() // ------------------------------------------------------------------------------------------------------ -GUIEngine::EventPropagation AddDeviceDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation AddDeviceDialog::processEvent(const std::string& eventSource) { if (eventSource == "cancel") diff --git a/src/states_screens/dialogs/add_device_dialog.hpp b/src/states_screens/dialogs/add_device_dialog.hpp index 0a22d025b..05f1a7fad 100644 --- a/src/states_screens/dialogs/add_device_dialog.hpp +++ b/src/states_screens/dialogs/add_device_dialog.hpp @@ -31,7 +31,7 @@ public: */ AddDeviceDialog(); void onEnterPressedInternal(); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const std::string& eventSource); }; diff --git a/src/states_screens/dialogs/confirm_resolution_dialog.cpp b/src/states_screens/dialogs/confirm_resolution_dialog.cpp index c13db97fe..1745e7bde 100644 --- a/src/states_screens/dialogs/confirm_resolution_dialog.cpp +++ b/src/states_screens/dialogs/confirm_resolution_dialog.cpp @@ -131,7 +131,7 @@ void ConfirmResolutionDialog::updateMessage() // ------------------------------------------------------------------------------------------------------ -GUIEngine::EventPropagation ConfirmResolutionDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation ConfirmResolutionDialog::processEvent(const std::string& eventSource) { if (eventSource == "cancel") diff --git a/src/states_screens/dialogs/confirm_resolution_dialog.hpp b/src/states_screens/dialogs/confirm_resolution_dialog.hpp index c6ca50c04..2b1da6fd6 100644 --- a/src/states_screens/dialogs/confirm_resolution_dialog.hpp +++ b/src/states_screens/dialogs/confirm_resolution_dialog.hpp @@ -36,7 +36,7 @@ public: ConfirmResolutionDialog(); void onEnterPressedInternal(); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const std::string& eventSource); virtual void onUpdate(float dt); }; diff --git a/src/states_screens/dialogs/enter_player_name_dialog.cpp b/src/states_screens/dialogs/enter_player_name_dialog.cpp index 6d6c53545..a8f3d8be5 100644 --- a/src/states_screens/dialogs/enter_player_name_dialog.cpp +++ b/src/states_screens/dialogs/enter_player_name_dialog.cpp @@ -90,7 +90,7 @@ EnterPlayerNameDialog::~EnterPlayerNameDialog() // ----------------------------------------------------------------------------- -GUIEngine::EventPropagation EnterPlayerNameDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation EnterPlayerNameDialog::processEvent(const std::string& eventSource) { if(eventSource == "cancel") { diff --git a/src/states_screens/dialogs/enter_player_name_dialog.hpp b/src/states_screens/dialogs/enter_player_name_dialog.hpp index 42d4ec70f..a0a9757b0 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(); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const std::string& eventSource); }; #endif diff --git a/src/states_screens/dialogs/gp_info_dialog.cpp b/src/states_screens/dialogs/gp_info_dialog.cpp index 03faaf6c6..92a66056f 100644 --- a/src/states_screens/dialogs/gp_info_dialog.cpp +++ b/src/states_screens/dialogs/gp_info_dialog.cpp @@ -214,7 +214,7 @@ void GPInfoDialog::onEnterPressedInternal() // ------------------------------------------------------------------------------------------------------ -GUIEngine::EventPropagation GPInfoDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation GPInfoDialog::processEvent(const std::string& eventSource) { if (eventSource == "start") { diff --git a/src/states_screens/dialogs/gp_info_dialog.hpp b/src/states_screens/dialogs/gp_info_dialog.hpp index d675de2cf..f974c7854 100644 --- a/src/states_screens/dialogs/gp_info_dialog.hpp +++ b/src/states_screens/dialogs/gp_info_dialog.hpp @@ -41,7 +41,7 @@ public: virtual ~GPInfoDialog(); void onEnterPressedInternal(); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const std::string& eventSource); virtual void onUpdate(float dt); diff --git a/src/states_screens/dialogs/player_info_dialog.cpp b/src/states_screens/dialogs/player_info_dialog.cpp index 41411cb49..4f009d956 100644 --- a/src/states_screens/dialogs/player_info_dialog.cpp +++ b/src/states_screens/dialogs/player_info_dialog.cpp @@ -191,7 +191,7 @@ void PlayerInfoDialog::onEnterPressedInternal() // ------------------------------------------------------------------------------------------------------ -GUIEngine::EventPropagation PlayerInfoDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation PlayerInfoDialog::processEvent(const std::string& eventSource) { if (eventSource == "renameplayer") { diff --git a/src/states_screens/dialogs/player_info_dialog.hpp b/src/states_screens/dialogs/player_info_dialog.hpp index 69098fc54..0c04ed4c4 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(); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const 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 06b67700e..b817818a5 100644 --- a/src/states_screens/dialogs/press_a_key_dialog.cpp +++ b/src/states_screens/dialogs/press_a_key_dialog.cpp @@ -61,7 +61,7 @@ PressAKeyDialog::PressAKeyDialog(const float w, const float h) : // ------------------------------------------------------------------------------------------------------ -GUIEngine::EventPropagation PressAKeyDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation PressAKeyDialog::processEvent(const std::string& eventSource) { if(eventSource == "cancel") { diff --git a/src/states_screens/dialogs/press_a_key_dialog.hpp b/src/states_screens/dialogs/press_a_key_dialog.hpp index a19ff5561..eb687fc60 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); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const 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 ee458bba7..690c427dd 100644 --- a/src/states_screens/dialogs/race_over_dialog.cpp +++ b/src/states_screens/dialogs/race_over_dialog.cpp @@ -290,7 +290,7 @@ void RaceOverDialog::onEnterPressedInternal() // ------------------------------------------------------------------------------------------------------ -GUIEngine::EventPropagation RaceOverDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation RaceOverDialog::processEvent(const std::string& eventSource) { if (eventSource == "raceagainbtn") { @@ -327,80 +327,24 @@ GUIEngine::EventPropagation RaceOverDialog::processEvent(std::string& eventSourc return GUIEngine::EVENT_LET; } - //----------------------------------------------------------------------------- - /** This is used on the client and server to display a message while waiting - * in a barrier for clients and server to ack the display. - */ -/* - TODO : port this code back - -void RaceResultsGUI::update(float dt) -{ - BaseGUI::update(dt); - // If an item is selected (for the first time), change the text - // so that the user has feedback about his selection. - if(m_selected_widget!=WTOK_NONE && m_first_time) - { - m_first_time = false; - // User feedback on first selection: display message, and on the - // server remove unnecessary widgets. - widget_manager->setWgtText(WTOK_CONTINUE, _("Synchronising.")); - if(network_manager->getMode()==NetworkManager::NW_SERVER) - { - widget_manager->hideWgt(WTOK_RESTART_RACE); - widget_manager->hideWgt(WTOK_SETUP_NEW_RACE); - } - } // m_selected_token defined and not first time - - // Wait till the barrier is finished. On the server this is the case when - // the state ie MAIN_MENU, on the client when it is wait_for_available_characters. - if(network_manager->getMode() !=NetworkManager::NW_NONE && - network_manager->getState()!=NetworkManager::NS_MAIN_MENU && - network_manager->getState()!=NetworkManager::NS_RACE_RESULT_BARRIER_OVER ) - return; - - // Send selected menu to all clients - if(m_selected_widget!=WTOK_NONE && - network_manager->getMode()==NetworkManager::NW_SERVER) - { - network_manager->sendRaceResultAck(m_selected_widget); - } - - switch(m_selected_widget) - { - case WTOK_CONTINUE: - // Gets called when: - // 1) something was unlocked - // 2) a Grand Prix is run - // 3) "back to the main menu" otherwise - RaceManager::getWorld()->unpause(); - widget_manager->setWgtText(WTOK_CONTINUE, _("Loading race...")); - race_manager->next(); - break; - case WTOK_RESTART_RACE: - network_manager->setState(NetworkManager::NS_MAIN_MENU); - RaceManager::getWorld()->unpause(); - menu_manager->popMenu(); - race_manager->rerunRace(); - break; - case WTOK_SETUP_NEW_RACE: - RaceManager::getWorld()->unpause(); - race_manager->exit_race(); - if(network_manager->getMode()==NetworkManager::NW_CLIENT) - { - network_manager->setState(NetworkManager::NS_WAIT_FOR_AVAILABLE_CHARACTERS); - menu_manager->pushMenu(MENUID_CHARSEL_P1); - } - else - { - menu_manager->pushMenu(MENUID_GAMEMODE); - } - break; - - default: - break; - } - -} // update +//----------------------------------------------------------------------------- -*/ +void RaceOverDialog::escapePressed() +{ + if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX) + { + std::string what = "continuegp"; + processEvent(what); + } + else if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_SINGLE) + { + std::string what = "backtomenu"; + processEvent(what); + } + else + { + assert(false); + } +} + +//----------------------------------------------------------------------------- diff --git a/src/states_screens/dialogs/race_over_dialog.hpp b/src/states_screens/dialogs/race_over_dialog.hpp index 300a33e78..d441b1af5 100644 --- a/src/states_screens/dialogs/race_over_dialog.hpp +++ b/src/states_screens/dialogs/race_over_dialog.hpp @@ -30,7 +30,9 @@ public: RaceOverDialog(const float percentWidth, const float percentHeight); void onEnterPressedInternal(); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const std::string& eventSource); + + virtual void escapePressed(); }; diff --git a/src/states_screens/dialogs/race_paused_dialog.cpp b/src/states_screens/dialogs/race_paused_dialog.cpp index dbee4efbd..ae79bb840 100644 --- a/src/states_screens/dialogs/race_paused_dialog.cpp +++ b/src/states_screens/dialogs/race_paused_dialog.cpp @@ -155,7 +155,7 @@ void RacePausedDialog::onEnterPressedInternal() // ------------------------------------------------------------------------------------------------------ -GUIEngine::EventPropagation RacePausedDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation RacePausedDialog::processEvent(const std::string& eventSource) { std::cout << "RacePausedDialog::processEvent(" << eventSource.c_str() << ")\n"; diff --git a/src/states_screens/dialogs/race_paused_dialog.hpp b/src/states_screens/dialogs/race_paused_dialog.hpp index 7e496e71c..7ca6ae19c 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(); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const 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 ec6431e8a..3e2114db5 100644 --- a/src/states_screens/dialogs/track_info_dialog.cpp +++ b/src/states_screens/dialogs/track_info_dialog.cpp @@ -310,7 +310,7 @@ void TrackInfoDialog::onEnterPressedInternal() // ------------------------------------------------------------------------------------------------------ -GUIEngine::EventPropagation TrackInfoDialog::processEvent(std::string& eventSource) +GUIEngine::EventPropagation TrackInfoDialog::processEvent(const std::string& eventSource) { if (eventSource == "start" ) { diff --git a/src/states_screens/dialogs/track_info_dialog.hpp b/src/states_screens/dialogs/track_info_dialog.hpp index e7f20f52b..2f39f4eca 100644 --- a/src/states_screens/dialogs/track_info_dialog.hpp +++ b/src/states_screens/dialogs/track_info_dialog.hpp @@ -47,7 +47,7 @@ public: virtual ~TrackInfoDialog(); void onEnterPressedInternal(); - GUIEngine::EventPropagation processEvent(std::string& eventSource); + GUIEngine::EventPropagation processEvent(const std::string& eventSource); }; #endif diff --git a/src/states_screens/state_manager.cpp b/src/states_screens/state_manager.cpp index dce7ef171..5ad187345 100644 --- a/src/states_screens/state_manager.cpp +++ b/src/states_screens/state_manager.cpp @@ -153,7 +153,7 @@ void StateManager::escapePressed() // when another modal dialog is visible else if(ModalDialog::isADialogActive()) { - ModalDialog::dismiss(); + ModalDialog::getCurrent()->escapePressed(); } // In-game else if(m_game_mode == GAME)