From: <au...@us...> - 2009-12-19 19:09:24
|
Revision: 4323 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4323&view=rev Author: auria Date: 2009-12-19 19:09:07 +0000 (Sat, 19 Dec 2009) Log Message: ----------- Dialog cleanup; made end of track dialog usable without mouse Modified Paths: -------------- main/trunk/src/states_screens/dialogs/race_over_dialog.cpp main/trunk/src/states_screens/dialogs/track_info_dialog.cpp Modified: main/trunk/src/states_screens/dialogs/race_over_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2009-12-19 18:54:08 UTC (rev 4322) +++ main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2009-12-19 19:09:07 UTC (rev 4323) @@ -234,7 +234,8 @@ } m_children.push_back(whats_next_btn); whats_next_btn->add(); - + + whats_next_btn->setFocusForPlayer( GUI_PLAYER_ID ); } void RaceOverDialog::onEnterPressedInternal() Modified: main/trunk/src/states_screens/dialogs/track_info_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/track_info_dialog.cpp 2009-12-19 18:54:08 UTC (rev 4322) +++ main/trunk/src/states_screens/dialogs/track_info_dialog.cpp 2009-12-19 19:09:07 UTC (rev 4323) @@ -197,11 +197,7 @@ screenshotWidget->y = area_right.UpperLeftCorner.Y; screenshotWidget->w = area_right.getWidth(); screenshotWidget->h = area_right.getHeight(); - //std::cout << screenshotWidget->x << ", " << screenshotWidget->y << " : " << screenshotWidget->w << ", " << screenshotWidget->h << std::endl; screenshotWidget->m_properties[PROP_ICON] = "gui/main_help.png"; // temporary icon, will replace it just after - - //screenshotWidget->setScaleImage(true); - //screenshotWidget->setTabStop(false); screenshotWidget->setParent(m_irrlicht_window); screenshotWidget->add(); screenshotWidget->setImage(screenshot); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2009-12-30 19:24:29
|
Revision: 4373 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4373&view=rev Author: auria Date: 2009-12-30 19:24:21 +0000 (Wed, 30 Dec 2009) Log Message: ----------- Fixed warning Modified Paths: -------------- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp main/trunk/src/states_screens/dialogs/race_over_dialog.cpp Modified: main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp 2009-12-30 19:09:10 UTC (rev 4372) +++ main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp 2009-12-30 19:24:21 UTC (rev 4373) @@ -46,7 +46,7 @@ // ---- - IGUIFont* font = GUIEngine::getFont(); + //IGUIFont* font = GUIEngine::getFont(); const int textHeight = GUIEngine::getFontHeight(); const int textAreaYFrom = m_area.getHeight()/2 - textHeight/2; Modified: main/trunk/src/states_screens/dialogs/race_over_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2009-12-30 19:09:10 UTC (rev 4372) +++ main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2009-12-30 19:24:21 UTC (rev 4373) @@ -44,7 +44,7 @@ //const int w = m_area.getWidth(); //const int h = m_area.getHeight(); - IGUIFont* font = GUIEngine::getFont(); + //IGUIFont* font = GUIEngine::getFont(); const int text_height = GUIEngine::getFontHeight(); const int button_h = text_height + 6; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2010-01-31 19:19:39
|
Revision: 4582 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4582&view=rev Author: auria Date: 2010-01-31 19:19:32 +0000 (Sun, 31 Jan 2010) Log Message: ----------- update highscores display when number of laps changes Modified Paths: -------------- main/trunk/src/states_screens/dialogs/track_info_dialog.cpp main/trunk/src/states_screens/dialogs/track_info_dialog.hpp Modified: main/trunk/src/states_screens/dialogs/track_info_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/track_info_dialog.cpp 2010-01-31 19:03:50 UTC (rev 4581) +++ main/trunk/src/states_screens/dialogs/track_info_dialog.cpp 2010-01-31 19:19:32 UTC (rev 4582) @@ -40,6 +40,7 @@ using namespace irr::core; using namespace GUIEngine; +// ------------------------------------------------------------------------------------------------------ TrackInfoDialog::TrackInfoDialog(const std::string& trackIdent, const irr::core::stringw& trackName, ITexture* screenshot, const float w, const float h) : ModalDialog(w, h) @@ -58,93 +59,18 @@ a->setTabStop(false); // ---- High Scores & track info - // TODO: update highscores display when number of laps changes - const int hscores_y_from = y1; const int hscores_y_to = y1 + (y2 - y1)*2/3; - - core::rect< s32 > hiscores_title_area(5, hscores_y_from, m_area.getWidth()/2, hscores_y_from + 30); - stringw text = _("= Highscores ="); - IGUIStaticText* hscores_header = GUIEngine::getGUIEnv()->addStaticText( text.c_str(), hiscores_title_area, - false , true , // border, word warp - m_irrlicht_window); - hscores_header->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); - + addHighScoreWidgets(hscores_y_from, hscores_y_to); + updateHighScores(); - ITexture* texture = irr_driver->getTexture( (file_manager->getGUIDir() + "/random_kart.png").c_str() ) ; - - std::string game_mode_ident = RaceManager::getIdentOf( race_manager->getMinorMode() ); - const HighscoreEntry::HighscoreType type = "HST_" + game_mode_ident; - - HighscoreEntry* highscores = highscore_manager->getHighscoreEntry(type, - race_manager->getNumKarts(), - race_manager->getDifficulty(), - trackIdent, - race_manager->getNumLaps()); - const int amount = highscores->getNumberEntries(); - - std::string kart_name; - std::string name; - float time; - - // fill highscore entries - for (int n=0; n<HIGHSCORE_COUNT; n++) - { - const int from_y = hscores_y_from + (hscores_y_to - hscores_y_from)*(n+1)/(HIGHSCORE_COUNT+1); - const int next_from_y = hscores_y_from + (hscores_y_to - hscores_y_from)*(n+2)/(HIGHSCORE_COUNT+1); - - const int gap = 3; - const int icon_size = next_from_y - from_y - gap*2; - - core::rect< s32 > icon_area(5, from_y + gap, 5 + icon_size, from_y + icon_size); - - m_kart_icons[n] = GUIEngine::getGUIEnv()->addImage( icon_area, m_irrlicht_window ); - m_kart_icons[n]->setImage(texture); - m_kart_icons[n]->setScaleImage(true); - m_kart_icons[n]->setTabStop(false); - m_kart_icons[n]->setUseAlphaChannel(true); - - core::rect< s32 > entry_area(icon_size + 10, from_y, m_area.getWidth()/2, next_from_y); - - irr::core::stringw line; - - // Check if this entry is filled or still empty - if (n < amount) - { - char buffer[256]; - - highscores->getEntry(n, kart_name, name, &time); - sprintf(buffer, "%s : %.2f s\n", name.c_str(), time); - - const KartProperties* prop = kart_properties_manager->getKart(kart_name); - if (prop != NULL) - { - std::string icon_path = file_manager->getDataDir() ; - icon_path += "/karts/" + prop->getIdent() + "/" + prop->getIconFile(); - ITexture* kart_icon_texture = irr_driver->getTexture( icon_path ); - m_kart_icons[n]->setImage(kart_icon_texture); - } - line = buffer; - } - else - { - //I18N: for empty highscores entries - line = _("(Empty)"); - line += "\n"; - } - - m_highscore_entries[n] = GUIEngine::getGUIEnv()->addStaticText( line.c_str(), entry_area, - false , true , // border, word warp - m_irrlicht_window); - - } - + // ---- Track credits Track* track = track_manager->getTrack(trackIdent); core::rect< s32 > creator_info_area(0, hscores_y_to, m_area.getWidth()/2, y2); //I18N: when showing who is the author of track '%s' (place %s where the name of the author should appear) - text = StringUtils::insertValues(_("Track by %s"), track->getDesigner().c_str()); + stringw text = StringUtils::insertValues(_("Track by %s"), track->getDesigner().c_str()); IGUIStaticText* b = GUIEngine::getGUIEnv()->addStaticText( text.c_str(), creator_info_area, false , true , // border, word warp @@ -180,6 +106,7 @@ m_spinner->h = y3 - y2 - 15; m_spinner->setParent(m_irrlicht_window); + m_spinner->m_properties[PROP_ID] = "lapcountspinner"; m_spinner->m_properties[PROP_MIN_VALUE] = "1"; m_spinner->m_properties[PROP_MAX_VALUE] = "99"; @@ -210,6 +137,8 @@ } +// ------------------------------------------------------------------------------------------------------ + TrackInfoDialog::~TrackInfoDialog() { // Place focus back on selected track, in case the dialog was cancelled and we're back to @@ -224,6 +153,102 @@ // ------------------------------------------------------------------------------------------------------ +void TrackInfoDialog::addHighScoreWidgets(const int hscores_y_from, const int hscores_y_to) +{ + ITexture* texture = irr_driver->getTexture( (file_manager->getGUIDir() + "/random_kart.png").c_str() ) ; + + core::rect< s32 > hiscores_title_area(5, hscores_y_from, m_area.getWidth()/2, hscores_y_from + 30); + stringw text = _("= Highscores ="); + IGUIStaticText* hscores_header = GUIEngine::getGUIEnv()->addStaticText( text.c_str(), hiscores_title_area, + false , true , // border, word warp + m_irrlicht_window); + hscores_header->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); + + + + // fill highscore entries + for (int n=0; n<HIGHSCORE_COUNT; n++) + { + const int from_y = hscores_y_from + (hscores_y_to - hscores_y_from)*(n+1)/(HIGHSCORE_COUNT+1); + const int next_from_y = hscores_y_from + (hscores_y_to - hscores_y_from)*(n+2)/(HIGHSCORE_COUNT+1); + + const int gap = 3; + const int icon_size = next_from_y - from_y - gap*2; + + core::rect< s32 > icon_area(5, from_y + gap, 5 + icon_size, from_y + icon_size); + + m_kart_icons[n] = GUIEngine::getGUIEnv()->addImage( icon_area, m_irrlicht_window ); + m_kart_icons[n]->setImage(texture); + m_kart_icons[n]->setScaleImage(true); + m_kart_icons[n]->setTabStop(false); + m_kart_icons[n]->setUseAlphaChannel(true); + + core::rect< s32 > entry_area(icon_size + 10, from_y, m_area.getWidth()/2, next_from_y); + m_highscore_entries[n] = GUIEngine::getGUIEnv()->addStaticText( L"", entry_area, + false , true , // border, word warp + m_irrlicht_window); + } +} + +// ------------------------------------------------------------------------------------------------------ + +void TrackInfoDialog::updateHighScores() +{ + std::string game_mode_ident = RaceManager::getIdentOf( race_manager->getMinorMode() ); + const HighscoreEntry::HighscoreType type = "HST_" + game_mode_ident; + + HighscoreEntry* highscores = highscore_manager->getHighscoreEntry(type, + race_manager->getNumKarts(), + race_manager->getDifficulty(), + m_track_ident, + race_manager->getNumLaps()); + const int amount = highscores->getNumberEntries(); + + std::string kart_name; + std::string name; + float time; + + // fill highscore entries + for (int n=0; n<HIGHSCORE_COUNT; n++) + { + irr::core::stringw line; + + // Check if this entry is filled or still empty + if (n < amount) + { + char buffer[256]; + + highscores->getEntry(n, kart_name, name, &time); + sprintf(buffer, "%s : %.2f s\n", name.c_str(), time); + + const KartProperties* prop = kart_properties_manager->getKart(kart_name); + if (prop != NULL) + { + std::string icon_path = file_manager->getDataDir() ; + icon_path += "/karts/" + prop->getIdent() + "/" + prop->getIconFile(); + ITexture* kart_icon_texture = irr_driver->getTexture( icon_path ); + m_kart_icons[n]->setImage(kart_icon_texture); + } + line = buffer; + } + else + { + //I18N: for empty highscores entries + line = _("(Empty)"); + line += "\n"; + + ITexture* no_kart_texture = irr_driver->getTexture( (file_manager->getGUIDir() + "/random_kart.png").c_str() ) ; + m_kart_icons[n]->setImage(no_kart_texture); + + } + + m_highscore_entries[n]->setText( line.c_str() ); + + } +} + +// ------------------------------------------------------------------------------------------------------ + // FIXME : this probably doesn't belong here void startGame(const std::string trackIdent, const int num_laps) { @@ -231,7 +256,7 @@ IVideoDriver* driver = GUIEngine::getDriver(); - // TODO : draw a loading screen + //TODO?: draw a loading screen driver->endScene(); driver->beginScene(true, false); driver->endScene(); @@ -248,13 +273,17 @@ race_manager->startNew(); } + // ------------------------------------------------------------------------------------------------------ + void TrackInfoDialog::onEnterPressedInternal() { const int num_laps = m_spinner->getValue(); startGame(m_track_ident, num_laps); } + // ------------------------------------------------------------------------------------------------------ + GUIEngine::EventPropagation TrackInfoDialog::processEvent(std::string& eventSource) { if (eventSource == "start" ) @@ -263,5 +292,12 @@ startGame(m_track_ident, num_laps); return GUIEngine::EVENT_BLOCK; } + else if (eventSource == "lapcountspinner") + { + const int num_laps = m_spinner->getValue(); + race_manager->setNumLaps(num_laps); + updateHighScores(); + } + return GUIEngine::EVENT_LET; } Modified: main/trunk/src/states_screens/dialogs/track_info_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/track_info_dialog.hpp 2010-01-31 19:03:50 UTC (rev 4581) +++ main/trunk/src/states_screens/dialogs/track_info_dialog.hpp 2010-01-31 19:19:32 UTC (rev 4582) @@ -35,6 +35,9 @@ irr::gui::IGUIImage* m_kart_icons[HIGHSCORE_COUNT]; irr::gui::IGUIStaticText* m_highscore_entries[HIGHSCORE_COUNT]; + void addHighScoreWidgets(const int hscores_y_from, const int hscores_y_to); + void updateHighScores(); + public: /** * Creates a modal dialog with given percentage of screen width and height This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2010-02-13 00:36:57
|
Revision: 4698 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4698&view=rev Author: auria Date: 2010-02-13 00:16:34 +0000 (Sat, 13 Feb 2010) Log Message: ----------- Minor: some code style cleanup Modified Paths: -------------- main/trunk/src/states_screens/dialogs/add_device_dialog.cpp main/trunk/src/states_screens/dialogs/confirm_resolution_dialog.cpp main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp main/trunk/src/states_screens/dialogs/player_info_dialog.cpp main/trunk/src/states_screens/dialogs/press_a_key_dialog.cpp main/trunk/src/states_screens/dialogs/race_over_dialog.cpp main/trunk/src/states_screens/dialogs/race_paused_dialog.cpp main/trunk/src/states_screens/dialogs/track_info_dialog.cpp Modified: main/trunk/src/states_screens/dialogs/add_device_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/add_device_dialog.cpp 2010-02-13 00:09:58 UTC (rev 4697) +++ main/trunk/src/states_screens/dialogs/add_device_dialog.cpp 2010-02-13 00:16:34 UTC (rev 4698) @@ -32,6 +32,8 @@ using namespace irr::gui; using namespace irr::core; +// ------------------------------------------------------------------------------------------------------ + AddDeviceDialog::AddDeviceDialog() : ModalDialog(0.7f, 0.7f) { IGUIFont* font = GUIEngine::getFont(); @@ -85,11 +87,15 @@ } } + // ------------------------------------------------------------------------------------------------------ + void AddDeviceDialog::onEnterPressedInternal() { } + // ------------------------------------------------------------------------------------------------------ + GUIEngine::EventPropagation AddDeviceDialog::processEvent(std::string& eventSource) { @@ -111,3 +117,5 @@ return GUIEngine::EVENT_LET; } + +// ------------------------------------------------------------------------------------------------------ Modified: main/trunk/src/states_screens/dialogs/confirm_resolution_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/confirm_resolution_dialog.cpp 2010-02-13 00:09:58 UTC (rev 4697) +++ main/trunk/src/states_screens/dialogs/confirm_resolution_dialog.cpp 2010-02-13 00:16:34 UTC (rev 4698) @@ -30,6 +30,8 @@ using namespace irr::gui; using namespace irr::core; +// ------------------------------------------------------------------------------------------------------ + ConfirmResolutionDialog::ConfirmResolutionDialog() : ModalDialog(0.7f, 0.7f) { m_countdown_message = NULL; Modified: main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp 2010-02-13 00:09:58 UTC (rev 4697) +++ main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp 2010-02-13 00:16:34 UTC (rev 4698) @@ -27,6 +27,8 @@ using namespace irr::core; using namespace irr::gui; +// ----------------------------------------------------------------------------- + EnterPlayerNameDialog::EnterPlayerNameDialog(const float w, const float h) : ModalDialog(w, h) { @@ -78,10 +80,16 @@ cancelButton->add(); } + +// ----------------------------------------------------------------------------- + EnterPlayerNameDialog::~EnterPlayerNameDialog() { textCtrl->getIrrlichtElement()->remove(); } + +// ----------------------------------------------------------------------------- + GUIEngine::EventPropagation EnterPlayerNameDialog::processEvent(std::string& eventSource) { if(eventSource == "cancel") @@ -91,6 +99,9 @@ } return GUIEngine::EVENT_LET; } + +// ----------------------------------------------------------------------------- + void EnterPlayerNameDialog::onEnterPressedInternal() { // ---- Cancel button pressed @@ -116,3 +127,7 @@ ModalDialog::dismiss(); } + +// ----------------------------------------------------------------------------- + + Modified: main/trunk/src/states_screens/dialogs/player_info_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/player_info_dialog.cpp 2010-02-13 00:09:58 UTC (rev 4697) +++ main/trunk/src/states_screens/dialogs/player_info_dialog.cpp 2010-02-13 00:16:34 UTC (rev 4698) @@ -29,6 +29,8 @@ using namespace irr::gui; using namespace irr::core; +// ------------------------------------------------------------------------------------------------------ + PlayerInfoDialog::PlayerInfoDialog(PlayerProfile* player, const float w, const float h) : ModalDialog(w, h) { m_player = player; @@ -115,7 +117,9 @@ textCtrl->setFocusForPlayer( GUI_PLAYER_ID ); } + // ------------------------------------------------------------------------------------------------------ + void PlayerInfoDialog::showConfirmDialog() { clearWindow(); @@ -135,8 +139,8 @@ // When there is no need to tab through / click on images/labels, we can add directly // irrlicht labels (more complicated uses require the use of our widget set) IGUIStaticText* a = GUIEngine::getGUIEnv()->addStaticText( message.c_str(), - area_left, false /* border */, true /* word wrap */, - m_irrlicht_window); + area_left, false /* border */, true /* word wrap */, + m_irrlicht_window); a->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); { @@ -178,11 +182,15 @@ } } + // ------------------------------------------------------------------------------------------------------ + void PlayerInfoDialog::onEnterPressedInternal() { } + // ------------------------------------------------------------------------------------------------------ + GUIEngine::EventPropagation PlayerInfoDialog::processEvent(std::string& eventSource) { if (eventSource == "renameplayer") @@ -238,3 +246,6 @@ } return GUIEngine::EVENT_LET; } + +// ------------------------------------------------------------------------------------------------------ + Modified: main/trunk/src/states_screens/dialogs/press_a_key_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/press_a_key_dialog.cpp 2010-02-13 00:09:58 UTC (rev 4697) +++ main/trunk/src/states_screens/dialogs/press_a_key_dialog.cpp 2010-02-13 00:16:34 UTC (rev 4698) @@ -25,6 +25,8 @@ using namespace GUIEngine; using namespace irr::gui; +// ------------------------------------------------------------------------------------------------------ + PressAKeyDialog::PressAKeyDialog(const float w, const float h) : ModalDialog(w, h) { @@ -56,7 +58,9 @@ m_children.push_back(widget2); widget2->add(); } + // ------------------------------------------------------------------------------------------------------ + GUIEngine::EventPropagation PressAKeyDialog::processEvent(std::string& eventSource) { if(eventSource == "cancel") @@ -67,3 +71,5 @@ } return GUIEngine::EVENT_LET; } + +// ------------------------------------------------------------------------------------------------------ Modified: main/trunk/src/states_screens/dialogs/race_over_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2010-02-13 00:09:58 UTC (rev 4697) +++ main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2010-02-13 00:16:34 UTC (rev 4698) @@ -36,6 +36,8 @@ using namespace irr::gui; using namespace irr::video; +// ------------------------------------------------------------------------------------------------------ + RaceOverDialog::RaceOverDialog(const float percentWidth, const float percentHeight) : ModalDialog(percentWidth, percentHeight) @@ -43,10 +45,6 @@ // Switch to barrier mode: server waits for ack from each client network_manager->beginRaceResultBarrier(); - //const int w = m_area.getWidth(); - //const int h = m_area.getHeight(); - - //IGUIFont* font = GUIEngine::getFont(); const int text_height = GUIEngine::getFontHeight(); const int button_h = text_height + 6; @@ -72,8 +70,8 @@ const int lines_from_y = text_height + 15; // make things more compact if we're missing space - while (lines_from_y + (int)num_karts*line_h > buttons_y_from) // cheap way to avoid calculating the required size with proper maths - { + while (lines_from_y + (int)num_karts*line_h > buttons_y_from) // cheap way to avoid calculating the + { // required size with proper maths line_h = (int)(line_h*0.9f); } @@ -113,7 +111,8 @@ else { kart_results_line = StringUtils::insertValues( L"%i. %s %s", - current_kart->getPosition(), kart_name.c_str(), sTime); + current_kart->getPosition(), + kart_name.c_str(), sTime); } const KartProperties* prop = current_kart->getKartProperties(); @@ -122,10 +121,10 @@ ITexture* kart_icon_texture = irr_driver->getTexture( icon_path ); const int icon_size = text_height; - core::rect< s32 > entry_area(10 + icon_size, lines_from_y+line_h*i, m_area.getWidth()*2/3, lines_from_y+line_h*(i+1)); - core::rect< s32 > icon_area(5, lines_from_y + line_h*i, 5+icon_size, lines_from_y+ line_h*i + icon_size); - - // std::wcout << kart_results_line.c_str() << std::endl; + core::rect< s32 > entry_area(10 + icon_size, lines_from_y+line_h*i, + m_area.getWidth()*2/3, lines_from_y+line_h*(i+1)); + core::rect< s32 > icon_area(5, lines_from_y + line_h*i, + 5+icon_size, lines_from_y+ line_h*i + icon_size); GUIEngine::getGUIEnv()->addStaticText( kart_results_line.c_str(), entry_area, false , true , // border, word warp @@ -147,8 +146,8 @@ { core::rect< s32 > hsarea(m_area.getWidth()*2/3, 0, m_area.getWidth(), text_height); IGUIStaticText* highscores = GUIEngine::getGUIEnv()->addStaticText( _("Highscores"), - hsarea, false, false, // border, word warp - m_irrlicht_window); + hsarea, false, false, // border, word warp + m_irrlicht_window); highscores->setTabStop(false); highscores->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); @@ -182,8 +181,6 @@ } // next score } // end if hs != NULL - - // ---- Buttons at the bottom if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_SINGLE) { @@ -233,10 +230,14 @@ whats_next_btn->setFocusForPlayer( GUI_PLAYER_ID ); } +// ------------------------------------------------------------------------------------------------------ + void RaceOverDialog::onEnterPressedInternal() { } +// ------------------------------------------------------------------------------------------------------ + GUIEngine::EventPropagation RaceOverDialog::processEvent(std::string& eventSource) { if (eventSource == "raceagainbtn") @@ -274,7 +275,6 @@ 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. Modified: main/trunk/src/states_screens/dialogs/race_paused_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/race_paused_dialog.cpp 2010-02-13 00:09:58 UTC (rev 4697) +++ main/trunk/src/states_screens/dialogs/race_paused_dialog.cpp 2010-02-13 00:16:34 UTC (rev 4698) @@ -36,7 +36,10 @@ using namespace irr::core; using namespace irr::gui; -RacePausedDialog::RacePausedDialog(const float percentWidth, const float percentHeight) : ModalDialog(percentWidth, percentHeight) +// ------------------------------------------------------------------------------------------------------ + +RacePausedDialog::RacePausedDialog(const float percentWidth, const float percentHeight) : + ModalDialog(percentWidth, percentHeight) { World::getWorld()->pause(); @@ -141,87 +144,14 @@ m_choice_ribbon->add(); } -/* - 46 widget_manager->addTitleWgt( WTOK_PAUSE, 50, 7, _("Paused") ); - 47 - 48 widget_manager->addTextButtonWgt( WTOK_RETURN_RACE, 50, 7, _("Return To Race")); - 49 widget_manager->addTextButtonWgt( WTOK_OPTIONS, 50, 7, _("Options") ); - 50 widget_manager->addTextButtonWgt( WTOK_HELP, 50, 7, _("Help") ); - 51 widget_manager->addTextButtonWgt( WTOK_RESTART_RACE, 50, 7, _("Restart Race") ); - 52 - 53 if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_NORMAL_RACE) - 54 { - 55 widget_manager->addTextButtonWgt( WTOK_SETUP_NEW_RACE, 50, 7, - 56 _("Setup New Race") ); - 57 } - 58 - 59 widget_manager->addTextButtonWgt( WTOK_QUIT, 50, 7, _("Exit Race") ); - 60 - */ +// ------------------------------------------------------------------------------------------------------ -/* - 77 switch (clicked_token) - 78 { - 79 case WTOK_RETURN_RACE: - 80 RaceManager::getWorld()->unpause(); - 81 menu_manager->popMenu(); - 82 if(user_config->m_fullscreen) SDL_ShowCursor(SDL_DISABLE); - 83 break; - 84 - 85 case WTOK_SETUP_NEW_RACE: - 86 RaceManager::getWorld()->unpause(); - 87 race_manager->exit_race(); - 88 menu_manager->pushMenu(MENUID_CHARSEL_P1); - 89 break; - 90 - 91 case WTOK_RESTART_RACE: - 92 menu_manager->popMenu(); - 93 if(user_config->m_fullscreen) SDL_ShowCursor(SDL_DISABLE); - 94 RaceManager::getWorld()->restartRace(); - 95 break; - 96 - 97 case WTOK_OPTIONS: - 98 menu_manager->pushMenu(MENUID_OPTIONS); - 99 break; - 100 - 101 case WTOK_HELP: - 102 menu_manager->pushMenu(MENUID_HELP1); - 103 break; - 104 - 105 case WTOK_QUIT: - 106 RaceManager::getWorld()->unpause(); - 107 race_manager->exit_race(); - 108 break; - 109 - 110 default: - 111 break; - 112 } - 113 } - */ - -/* - void RaceMenu::handle(GameAction ga, int value) - 117 { - 118 switch ( ga ) - 119 { - 120 case GA_LEAVE: - 121 if (value) - 122 break; - 123 - 124 RaceManager::getWorld()->unpause(); - 125 menu_manager->popMenu(); - 126 break; - 127 - 128 default: - 129 BaseGUI::handle(ga, value); - 130 break; - 131 } - */ - void RacePausedDialog::onEnterPressedInternal() { } +// ------------------------------------------------------------------------------------------------------ + GUIEngine::EventPropagation RacePausedDialog::processEvent(std::string& eventSource) { std::cout << "RacePausedDialog::processEvent(" << eventSource.c_str() << ")\n"; @@ -236,9 +166,9 @@ { const std::string& selection = m_choice_ribbon->getSelectionIDString(GUI_PLAYER_ID); - std::cout << "RacePausedDialog::processEvent(" << eventSource.c_str() << " : " << selection << ")\n"; + std::cout << "RacePausedDialog::processEvent(" << eventSource.c_str() + << " : " << selection << ")\n"; - if (selection == "exit") { ModalDialog::dismiss(); @@ -279,8 +209,13 @@ return GUIEngine::EVENT_LET; } +// ------------------------------------------------------------------------------------------------------ + RacePausedDialog::~RacePausedDialog() { World::getWorld()->unpause(); } +// ------------------------------------------------------------------------------------------------------ + + Modified: main/trunk/src/states_screens/dialogs/track_info_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/track_info_dialog.cpp 2010-02-13 00:09:58 UTC (rev 4697) +++ main/trunk/src/states_screens/dialogs/track_info_dialog.cpp 2010-02-13 00:16:34 UTC (rev 4698) @@ -73,15 +73,16 @@ stringw text = StringUtils::insertValues(_("Track by %s"), track->getDesigner().c_str()); IGUIStaticText* b = GUIEngine::getGUIEnv()->addStaticText( text.c_str(), - creator_info_area, false , true , // border, word warp - m_irrlicht_window); + creator_info_area, false , true , // border, word warp + m_irrlicht_window); b->setTabStop(false); // ---- Track screenshot IconButtonWidget* screenshotWidget = new IconButtonWidget(IconButtonWidget::SCALE_MODE_KEEP_CUSTOM_ASPECT_RATIO, false, false); - screenshotWidget->setCustomAspectRatio(4.0f / 3.0f); // images are saved squared, but must be stretched to 4:3 + // images are saved squared, but must be stretched to 4: + screenshotWidget->setCustomAspectRatio(4.0f / 3.0f); 3 core::rect< s32 > area_right(m_area.getWidth()/2, y1, m_area.getWidth(), y2-10); screenshotWidget->x = area_right.UpperLeftCorner.X; @@ -89,7 +90,8 @@ screenshotWidget->w = area_right.getWidth(); screenshotWidget->h = area_right.getHeight(); - screenshotWidget->m_properties[PROP_ICON] = "gui/main_help.png"; // temporary icon, will replace it just after + // temporary icon, will replace it just after + screenshotWidget->m_properties[PROP_ICON] = "gui/main_help.png"; screenshotWidget->setParent(m_irrlicht_window); screenshotWidget->add(); screenshotWidget->setImage(screenshot); @@ -164,8 +166,6 @@ m_irrlicht_window); hscores_header->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); - - // fill highscore entries for (int n=0; n<HIGHSCORE_COUNT; n++) { @@ -185,8 +185,8 @@ core::rect< s32 > entry_area(icon_size + 10, from_y, m_area.getWidth()/2, next_from_y); m_highscore_entries[n] = GUIEngine::getGUIEnv()->addStaticText( L"", entry_area, - false , true , // border, word warp - m_irrlicht_window); + false , true , // border, word warp + m_irrlicht_window); } } @@ -238,7 +238,8 @@ line = _("(Empty)"); line += "\n"; - ITexture* no_kart_texture = irr_driver->getTexture( (file_manager->getGUIDir() + "/random_kart.png").c_str() ) ; + ITexture* no_kart_texture = irr_driver->getTexture( + (file_manager->getGUIDir() + "/random_kart.png").c_str() ) ; m_kart_icons[n]->setImage(no_kart_texture); } @@ -302,3 +303,5 @@ return GUIEngine::EVENT_LET; } + +// ------------------------------------------------------------------------------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2010-02-13 01:20:58
|
Revision: 4701 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4701&view=rev Author: auria Date: 2010-02-13 01:20:52 +0000 (Sat, 13 Feb 2010) Log Message: ----------- GP info screen now shows cycling screenshots of its tracks Modified Paths: -------------- main/trunk/src/states_screens/dialogs/gp_info_dialog.cpp main/trunk/src/states_screens/dialogs/gp_info_dialog.hpp main/trunk/src/states_screens/dialogs/track_info_dialog.cpp Modified: main/trunk/src/states_screens/dialogs/gp_info_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/gp_info_dialog.cpp 2010-02-13 01:01:52 UTC (rev 4700) +++ main/trunk/src/states_screens/dialogs/gp_info_dialog.cpp 2010-02-13 01:20:52 UTC (rev 4701) @@ -40,6 +40,8 @@ GPInfoDialog::GPInfoDialog(const std::string& gpIdent, const float w, const float h) : ModalDialog(w, h) { + m_curr_time = 0.0f; + const int y1 = m_area.getHeight()/7; const int y2 = m_area.getHeight()*6/7; @@ -74,7 +76,6 @@ for (int t=0; t<trackAmount; t++) { const int from_y = y1 + height_of_one_line*(t+1); - const int next_from_y = y1 + height_of_one_line*(t+2); Track* track = track_manager->getTrack(tracks[t]); stringw lineText; @@ -88,37 +89,45 @@ { lineText = track->getName(); } + + LabelWidget* widget = new LabelWidget(); + widget->m_text = lineText; + widget->x = 20; + widget->y = from_y; + widget->w = m_area.getWidth()/2 - 20; + widget->h = height_of_one_line; + widget->setParent(m_irrlicht_window); - core::rect< s32 > entry_area(20, from_y, m_area.getWidth()/2, next_from_y); - IGUIStaticText* line = GUIEngine::getGUIEnv()->addStaticText( lineText.c_str(), - entry_area, false , true , // border, word warp - m_irrlicht_window); + m_children.push_back(widget); + widget->add(); + + // IGUIStaticText* line = GUIEngine::getGUIEnv()->addStaticText( lineText.c_str(), + // entry_area, false , true , // border, word warp + // m_irrlicht_window); } - - /* + // ---- Track screenshot - IconButtonWidget* screenshotWidget = new IconButtonWidget(IconButtonWidget::SCALE_MODE_KEEP_CUSTOM_ASPECT_RATIO, + m_screenshot_widget = new IconButtonWidget(IconButtonWidget::SCALE_MODE_KEEP_CUSTOM_ASPECT_RATIO, false, false); - // images are saved squared, but must be stretched to 4: - screenshotWidget->setCustomAspectRatio(4.0f / 3.0f); 3 - core::rect< s32 > area_right(m_area.getWidth()/2, y1, m_area.getWidth(), y1-10); + // images are saved squared, but must be stretched to 4:3 + m_screenshot_widget->setCustomAspectRatio(4.0f / 3.0f); - screenshotWidget->x = area_right.UpperLeftCorner.X; - screenshotWidget->y = area_right.UpperLeftCorner.Y; - screenshotWidget->w = area_right.getWidth(); - screenshotWidget->h = area_right.getHeight(); + m_screenshot_widget->x = m_area.getWidth()/2; + m_screenshot_widget->y = y1; + m_screenshot_widget->w = m_area.getWidth()/2; + m_screenshot_widget->h = y2 - y1 - 10; - // temporary icon, will replace it just after - screenshotWidget->m_properties[PROP_ICON] = "gui/main_help.png"; - screenshotWidget->setParent(m_irrlicht_window); - screenshotWidget->add(); - screenshotWidget->setImage(screenshot); - m_children.push_back(screenshotWidget); + Track* track = track_manager->getTrack(tracks[0]); - a->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); - b->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); - */ + // temporary icon, will replace it just after adding (hack to support absolute paths [FIXME]) + m_screenshot_widget->m_properties[PROP_ICON] = "gui/main_help.png"; + m_screenshot_widget->setParent(m_irrlicht_window); + m_screenshot_widget->add(); + m_screenshot_widget->setImage(track != NULL ? track->getScreenshotFile().c_str() : "gui/main_help.png"); + m_children.push_back(m_screenshot_widget); + + // ---- Start button ButtonWidget* okBtn = new ButtonWidget(); okBtn->m_properties[PROP_ID] = "start"; @@ -200,3 +209,26 @@ } // ------------------------------------------------------------------------------------------------------ + +void GPInfoDialog::onUpdate(float dt) +{ + const int frameBefore = (int)(m_curr_time / 1.5f); + m_curr_time += dt; + int frameAfter = (int)(m_curr_time / 1.5f); + + if (frameAfter == frameBefore) return; // if nothing changed, return right now + + const GrandPrixData* gp = grand_prix_manager->getGrandPrix(m_gp_ident); + assert(gp != NULL); + const std::vector<std::string>& tracks = gp->getTracks(); + if (frameAfter >= (int)tracks.size()) + { + frameAfter = 0; + m_curr_time = 0; + } + + Track* track = track_manager->getTrack(tracks[frameAfter]); + m_screenshot_widget->setImage(track != NULL ? track->getScreenshotFile().c_str() : "gui/main_help.png"); +} + +// ------------------------------------------------------------------------------------------------------ Modified: main/trunk/src/states_screens/dialogs/gp_info_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/gp_info_dialog.hpp 2010-02-13 01:01:52 UTC (rev 4700) +++ main/trunk/src/states_screens/dialogs/gp_info_dialog.hpp 2010-02-13 01:20:52 UTC (rev 4701) @@ -21,10 +21,17 @@ #include "guiengine/modaldialog.hpp" +namespace GUIEngine +{ + class IconButtonWidget; +} + class GPInfoDialog : public GUIEngine::ModalDialog { std::string m_gp_ident; + GUIEngine::IconButtonWidget* m_screenshot_widget; + float m_curr_time; public: /** @@ -35,6 +42,9 @@ void onEnterPressedInternal(); GUIEngine::EventPropagation processEvent(std::string& eventSource); + + virtual void onUpdate(float dt); + }; #endif Modified: main/trunk/src/states_screens/dialogs/track_info_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/track_info_dialog.cpp 2010-02-13 01:01:52 UTC (rev 4700) +++ main/trunk/src/states_screens/dialogs/track_info_dialog.cpp 2010-02-13 01:20:52 UTC (rev 4701) @@ -90,7 +90,7 @@ screenshotWidget->w = area_right.getWidth(); screenshotWidget->h = area_right.getHeight(); - // temporary icon, will replace it just after + // temporary icon, will replace it just after (hack to support absolute paths [FIXME]) screenshotWidget->m_properties[PROP_ICON] = "gui/main_help.png"; screenshotWidget->setParent(m_irrlicht_window); screenshotWidget->add(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2010-02-14 21:23:45
|
Revision: 4709 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4709&view=rev Author: auria Date: 2010-02-14 21:23:38 +0000 (Sun, 14 Feb 2010) Log Message: ----------- Some work on GPs. @Joerg : when moving to the next race, the models of the first aren't removed Modified Paths: -------------- main/trunk/src/states_screens/dialogs/gp_info_dialog.cpp main/trunk/src/states_screens/dialogs/race_over_dialog.cpp Modified: main/trunk/src/states_screens/dialogs/gp_info_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/gp_info_dialog.cpp 2010-02-14 14:07:03 UTC (rev 4708) +++ main/trunk/src/states_screens/dialogs/gp_info_dialog.cpp 2010-02-14 21:23:38 UTC (rev 4709) @@ -188,6 +188,7 @@ network_manager->setupPlayerKartInfo(); //race_manager->getKartType(1) = KT_PLAYER; + race_manager->setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX); race_manager->startNew(); } Modified: main/trunk/src/states_screens/dialogs/race_over_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2010-02-14 14:07:03 UTC (rev 4708) +++ main/trunk/src/states_screens/dialogs/race_over_dialog.cpp 2010-02-14 21:23:38 UTC (rev 4709) @@ -45,6 +45,12 @@ // Switch to barrier mode: server waits for ack from each client network_manager->beginRaceResultBarrier(); + std::cout << "race_manager->getMajorMode()=" << race_manager->getMajorMode() + << ", RaceManager::MAJOR_MODE_GRAND_PRIX=" << RaceManager::MAJOR_MODE_GRAND_PRIX + << ", RaceManager::MAJOR_MODE_SINGLE=" << RaceManager::MAJOR_MODE_SINGLE << "\n"; + + const bool show_highscores = (race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX); + const int text_height = GUIEngine::getFontHeight(); const int button_h = text_height + 6; @@ -52,7 +58,7 @@ const int buttons_y_from = m_area.getHeight() - 3*(button_h + margin_between_buttons); // ---- Ranking - core::rect< s32 > area(0, 0, m_area.getWidth()*2/3, text_height); + core::rect< s32 > area(0, 0, (show_highscores ? m_area.getWidth()*2/3 : m_area.getWidth()), text_height); IGUIStaticText* caption = GUIEngine::getGUIEnv()->addStaticText( _("Race Results"), area, false, false, // border, word warp m_irrlicht_window); @@ -120,9 +126,11 @@ icon_path += "/karts/" + prop->getIdent() + "/" + prop->getIconFile(); ITexture* kart_icon_texture = irr_driver->getTexture( icon_path ); + const int entry_width = (show_highscores? m_area.getWidth()*2/3 : m_area.getWidth()); + const int icon_size = text_height; core::rect< s32 > entry_area(10 + icon_size, lines_from_y+line_h*i, - m_area.getWidth()*2/3, lines_from_y+line_h*(i+1)); + entry_width, lines_from_y+line_h*(i+1)); core::rect< s32 > icon_area(5, lines_from_y + line_h*i, 5+icon_size, lines_from_y+ line_h*i + icon_size); @@ -141,45 +149,48 @@ delete[] order; // ---- Highscores - const HighscoreEntry *hs = World::getWorld()->getHighscores(); - if (hs != NULL) + if (show_highscores) { - core::rect< s32 > hsarea(m_area.getWidth()*2/3, 0, m_area.getWidth(), text_height); - IGUIStaticText* highscores = GUIEngine::getGUIEnv()->addStaticText( _("Highscores"), - hsarea, false, false, // border, word warp - m_irrlicht_window); - highscores->setTabStop(false); - highscores->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); - - unsigned int num_scores = hs->getNumberEntries(); + const HighscoreEntry *hs = World::getWorld()->getHighscores(); + if (hs != NULL) + { + core::rect< s32 > hsarea(m_area.getWidth()*2/3, 0, m_area.getWidth(), text_height); + IGUIStaticText* highscores = GUIEngine::getGUIEnv()->addStaticText( _("Highscores"), + hsarea, false, false, // border, word warp + m_irrlicht_window); + highscores->setTabStop(false); + highscores->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); + + unsigned int num_scores = hs->getNumberEntries(); + + char timebuffer[64]; + for (unsigned int i=0; i<num_scores; i++) + { + std::string kart_name, name; + float T; + hs->getEntry(i, kart_name, name, &T); + const int MINS = (int) floor ( T / 60.0 ) ; + const int SECS = (int) floor ( T - (float) ( 60 * MINS ) ) ; + const int TENTHS = (int) floor ( 10.0f * (T - (float)(SECS + 60*MINS))); + sprintf(timebuffer, "%2d:%02d.%01d", MINS, SECS, TENTHS); + + const int line_from = lines_from_y + text_height*(i*3); - char timebuffer[64]; - for (unsigned int i=0; i<num_scores; i++) - { - std::string kart_name, name; - float T; - hs->getEntry(i, kart_name, name, &T); - const int MINS = (int) floor ( T / 60.0 ) ; - const int SECS = (int) floor ( T - (float) ( 60 * MINS ) ) ; - const int TENTHS = (int) floor ( 10.0f * (T - (float)(SECS + 60*MINS))); - sprintf(timebuffer, "%2d:%02d.%01d", MINS, SECS, TENTHS); - - const int line_from = lines_from_y + text_height*(i*3); - - stringw playerName = name.c_str(); - - core::rect< s32 > linearea(m_area.getWidth()*2/3, line_from, - m_area.getWidth(), line_from + text_height); - GUIEngine::getGUIEnv()->addStaticText( playerName.c_str(), - linearea, false, false, // border, word warp - m_irrlicht_window); - core::rect< s32 > linearea2(m_area.getWidth()*2/3, line_from + text_height, - m_area.getWidth(), line_from + text_height*2); - GUIEngine::getGUIEnv()->addStaticText( stringw(timebuffer).c_str(), - linearea2, false, false, // border, word warp - m_irrlicht_window); - } // next score - } // end if hs != NULL + stringw playerName = name.c_str(); + + core::rect< s32 > linearea(m_area.getWidth()*2/3, line_from, + m_area.getWidth(), line_from + text_height); + GUIEngine::getGUIEnv()->addStaticText( playerName.c_str(), + linearea, false, false, // border, word warp + m_irrlicht_window); + core::rect< s32 > linearea2(m_area.getWidth()*2/3, line_from + text_height, + m_area.getWidth(), line_from + text_height*2); + GUIEngine::getGUIEnv()->addStaticText( stringw(timebuffer).c_str(), + linearea2, false, false, // border, word warp + m_irrlicht_window); + } // next score + } // end if hs != NULL + } // end if not GP // ---- Buttons at the bottom if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_SINGLE) @@ -194,19 +205,33 @@ new_race_btn->setParent(m_irrlicht_window); m_children.push_back(new_race_btn); new_race_btn->add(); + + ButtonWidget* race_again_btn = new ButtonWidget(); + race_again_btn->m_properties[PROP_ID] = "raceagainbtn"; + race_again_btn->x = 15; + race_again_btn->y = m_area.getHeight() - (button_h + margin_between_buttons)*2; + race_again_btn->w = m_area.getWidth() - 30; + race_again_btn->h = button_h; + race_again_btn->m_text = _("Race in this track again"); + race_again_btn->setParent(m_irrlicht_window); + m_children.push_back(race_again_btn); + race_again_btn->add(); } + else + { + // grand prix + ButtonWidget* abort_gp = new ButtonWidget(); + abort_gp->m_properties[PROP_ID] = "backtomenu"; + abort_gp->x = 15; + abort_gp->y = m_area.getHeight() - (button_h + margin_between_buttons)*2; + abort_gp->w = m_area.getWidth() - 30; + abort_gp->h = button_h; + abort_gp->m_text = _("Abort Grand Prix"); + abort_gp->setParent(m_irrlicht_window); + m_children.push_back(abort_gp); + abort_gp->add(); + } - ButtonWidget* race_again_btn = new ButtonWidget(); - race_again_btn->m_properties[PROP_ID] = "raceagainbtn"; - race_again_btn->x = 15; - race_again_btn->y = m_area.getHeight() - (button_h + margin_between_buttons)*2; - race_again_btn->w = m_area.getWidth() - 30; - race_again_btn->h = button_h; - race_again_btn->m_text = _("Race in this track again"); - race_again_btn->setParent(m_irrlicht_window); - m_children.push_back(race_again_btn); - race_again_btn->add(); - ButtonWidget* whats_next_btn = new ButtonWidget(); whats_next_btn->x = 15; whats_next_btn->y = m_area.getHeight() - (button_h + margin_between_buttons); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2010-09-09 01:02:07
|
Revision: 5938 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=5938&view=rev Author: auria Date: 2010-09-09 01:02:01 +0000 (Thu, 09 Sep 2010) Log Message: ----------- Added missing Doxygen documentation Modified Paths: -------------- main/trunk/src/states_screens/dialogs/add_device_dialog.hpp main/trunk/src/states_screens/dialogs/confirm_dialog.hpp main/trunk/src/states_screens/dialogs/confirm_resolution_dialog.hpp main/trunk/src/states_screens/dialogs/enter_player_name_dialog.hpp main/trunk/src/states_screens/dialogs/gp_info_dialog.hpp main/trunk/src/states_screens/dialogs/player_info_dialog.hpp main/trunk/src/states_screens/dialogs/press_a_key_dialog.hpp main/trunk/src/states_screens/dialogs/race_paused_dialog.hpp main/trunk/src/states_screens/dialogs/track_info_dialog.hpp Modified: main/trunk/src/states_screens/dialogs/add_device_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/add_device_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/add_device_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -22,14 +22,17 @@ #include "config/player.hpp" #include "guiengine/modaldialog.hpp" - +/** + * \brief Dialog that warns the user about the potential problems of + * creating multiple keyboard configs. + * \ingroup states_screens + */ class AddDeviceDialog : public GUIEngine::ModalDialog { public: - /** - * Creates a modal dialog with given percentage of screen width and height - */ + AddDeviceDialog(); + void onEnterPressedInternal(); GUIEngine::EventPropagation processEvent(const std::string& eventSource); }; Modified: main/trunk/src/states_screens/dialogs/confirm_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/confirm_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/confirm_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -22,10 +22,18 @@ #include "config/player.hpp" #include "guiengine/modaldialog.hpp" - +/** + * \brief Generic dialog to ask the user to confirm something. + * \ingroup states_screens + */ class ConfirmDialog : public GUIEngine::ModalDialog { public: + + /** + * \brief Listener interface to get notified of whether the user chose to confirm or cancel + * \ingroup states_screens + */ class IConfirmDialogListener { public: @@ -45,8 +53,14 @@ public: + /** + * \param msg Message to display in the dialog + * \param listener A listener object to notify when the user made a choice + */ ConfirmDialog(irr::core::stringw msg, IConfirmDialogListener* listener); - void onEnterPressedInternal(); + + virtual void onEnterPressedInternal(); + GUIEngine::EventPropagation processEvent(const std::string& eventSource); }; Modified: main/trunk/src/states_screens/dialogs/confirm_resolution_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/confirm_resolution_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/confirm_resolution_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -22,7 +22,11 @@ #include "config/player.hpp" #include "guiengine/modaldialog.hpp" - +/** + * \brief Dialog shown after a resolution switch sot he user may confirm if + * the resolution works. + * \ingroup states_screens + */ class ConfirmResolutionDialog : public GUIEngine::ModalDialog { /** number of seconds left before resolution is considered unplayable */ Modified: main/trunk/src/states_screens/dialogs/enter_player_name_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/enter_player_name_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -28,11 +28,12 @@ class LabelWidget; } +/** + * \brief Dialog that allows the player to enter the name for a new player + * \ingroup states_screens + */ class EnterPlayerNameDialog : public GUIEngine::ModalDialog { - //GUIEngine::LabelWidget* m_label_ctrl; - //GUIEngine::TextBoxWidget* textCtrl; - //GUIEngine::ButtonWidget* cancelButton; public: /** Modified: main/trunk/src/states_screens/dialogs/gp_info_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/gp_info_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/gp_info_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -26,6 +26,10 @@ class IconButtonWidget; } +/** + * \brief Dialog that shows information about a specific grand prix + * \ingroup states_screens + */ class GPInfoDialog : public GUIEngine::ModalDialog { std::string m_gp_ident; Modified: main/trunk/src/states_screens/dialogs/player_info_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/player_info_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/player_info_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -27,6 +27,10 @@ class TextBoxWidget; } +/** + * \brief Dialog that allows renaming and deleting players + * \ingroup states_screens + */ class PlayerInfoDialog : public GUIEngine::ModalDialog { GUIEngine::TextBoxWidget* textCtrl; Modified: main/trunk/src/states_screens/dialogs/press_a_key_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/press_a_key_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/press_a_key_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -21,6 +21,10 @@ #include "guiengine/modaldialog.hpp" +/** + * \brief Dialog shown when editing input bindings and it's time to press a key + * \ingroup states_screens + */ class PressAKeyDialog : public GUIEngine::ModalDialog { public: Modified: main/trunk/src/states_screens/dialogs/race_paused_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/race_paused_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/race_paused_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -25,9 +25,12 @@ class RibbonWidget; } +/** + * \brief Dialog shown when the race is paused + * \ingroup states_screens + */ class RacePausedDialog : public GUIEngine::ModalDialog { - //GUIEngine::RibbonWidget* m_choice_ribbon; protected: virtual void loadedFromFile(); Modified: main/trunk/src/states_screens/dialogs/track_info_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/track_info_dialog.hpp 2010-09-09 00:54:55 UTC (rev 5937) +++ main/trunk/src/states_screens/dialogs/track_info_dialog.hpp 2010-09-09 01:02:01 UTC (rev 5938) @@ -26,6 +26,10 @@ namespace irr { namespace gui { class IGUIImage; class IGUIStaticText; } } +/** + * \brief Dialog that shows the information about a given track + * \ingroup states_screens + */ class TrackInfoDialog : public GUIEngine::ModalDialog { std::string m_track_ident; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <co...@us...> - 2011-08-17 01:57:54
|
Revision: 9545 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=9545&view=rev Author: coug36 Date: 2011-08-17 01:57:48 +0000 (Wed, 17 Aug 2011) Log Message: ----------- Change default behavior of MessageDialog confirm button to close the dialog Modified Paths: -------------- main/trunk/src/states_screens/dialogs/message_dialog.cpp main/trunk/src/states_screens/dialogs/message_dialog.hpp Modified: main/trunk/src/states_screens/dialogs/message_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/message_dialog.cpp 2011-08-17 01:52:53 UTC (rev 9544) +++ main/trunk/src/states_screens/dialogs/message_dialog.cpp 2011-08-17 01:57:48 UTC (rev 9545) @@ -100,8 +100,3 @@ } // ------------------------------------------------------------------------------------------------------ - -void MessageDialog::IConfirmDialogListener::onCancel() -{ - ModalDialog::dismiss(); -} Modified: main/trunk/src/states_screens/dialogs/message_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/message_dialog.hpp 2011-08-17 01:52:53 UTC (rev 9544) +++ main/trunk/src/states_screens/dialogs/message_dialog.hpp 2011-08-17 01:57:48 UTC (rev 9545) @@ -44,13 +44,13 @@ * \note The dialog is not closed automatically, close it in the callback if this * behavior is desired. */ - virtual void onConfirm() {}; + virtual void onConfirm() { ModalDialog::dismiss(); }; /** \brief Implement to be notified of dialog cancelled. * \note The default implementation is to close the modal dialog, but you may override * this method to change the behavior. */ - virtual void onCancel(); + virtual void onCancel() { ModalDialog::dismiss(); }; }; enum MessageDialogType { MESSAGE_DIALOG_OK, MESSAGE_DIALOG_CONFIRM }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <red...@us...> - 2011-09-01 00:41:52
|
Revision: 9692 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=9692&view=rev Author: red-skull Date: 2011-09-01 00:41:45 +0000 (Thu, 01 Sep 2011) Log Message: ----------- fix bugs added in r9532, constructor delegation doesn't work in C++ Revision Links: -------------- http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=9532&view=rev Modified Paths: -------------- main/trunk/src/states_screens/dialogs/message_dialog.cpp main/trunk/src/states_screens/dialogs/message_dialog.hpp Modified: main/trunk/src/states_screens/dialogs/message_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/message_dialog.cpp 2011-08-31 23:59:41 UTC (rev 9691) +++ main/trunk/src/states_screens/dialogs/message_dialog.cpp 2011-09-01 00:41:45 UTC (rev 9692) @@ -30,6 +30,21 @@ MessageDialog::MessageDialog(irr::core::stringw msg, MessageDialogType type, IConfirmDialogListener* listener, bool own_listener) : ModalDialog(0.6f, 0.6f) { + doInit(msg, type, listener, own_listener); +} + +// ------------------------------------------------------------------------------------------------------ + +MessageDialog::MessageDialog(irr::core::stringw msg) : + ModalDialog(0.6f, 0.6f) +{ + doInit(msg, MessageDialog::MESSAGE_DIALOG_OK, NULL, false); +} + +// ------------------------------------------------------------------------------------------------------ + +void MessageDialog::doInit(irr::core::stringw msg, MessageDialogType type, IConfirmDialogListener* listener, bool own_listener) +{ loadFromFile("confirm_dialog.stkgui"); m_listener = listener; @@ -50,14 +65,7 @@ } } -// ------------------------------------------------------------------------------------------------------ -MessageDialog::MessageDialog(irr::core::stringw msg) : - ModalDialog(0.6f, 0.6f) -{ - MessageDialog(msg, MessageDialog::MESSAGE_DIALOG_OK, NULL, false); -} - // ------------------------------------------------------------------------------------------------------ void MessageDialog::onEnterPressedInternal() Modified: main/trunk/src/states_screens/dialogs/message_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/message_dialog.hpp 2011-08-31 23:59:41 UTC (rev 9691) +++ main/trunk/src/states_screens/dialogs/message_dialog.hpp 2011-09-01 00:41:45 UTC (rev 9692) @@ -59,7 +59,8 @@ IConfirmDialogListener* m_listener; bool m_own_listener; - + void doInit(irr::core::stringw msg, MessageDialogType type, IConfirmDialogListener* listener, bool own_listener); + public: /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hik...@us...> - 2011-11-03 01:54:53
|
Revision: 10098 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=10098&view=rev Author: hikerstk Date: 2011-11-03 01:54:46 +0000 (Thu, 03 Nov 2011) Log Message: ----------- Fixed memory leak (and incorrect behaviour of STK) when ESC is pressed instead of 'cancel' to stop downloading an addon. Before this the download would actually finish. Modified Paths: -------------- main/trunk/src/states_screens/dialogs/addons_loading.cpp main/trunk/src/states_screens/dialogs/addons_loading.hpp Modified: main/trunk/src/states_screens/dialogs/addons_loading.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/addons_loading.cpp 2011-11-02 23:56:02 UTC (rev 10097) +++ main/trunk/src/states_screens/dialogs/addons_loading.cpp 2011-11-03 01:54:46 UTC (rev 10098) @@ -169,7 +169,14 @@ } // ---------------------------------------------------------------------------- +void AddonsLoading::escapePressed() +{ + processEvent("cancel"); + ModalDialog::dismiss(); +} // escapePressed +// ---------------------------------------------------------------------------- + GUIEngine::EventPropagation AddonsLoading::processEvent(const std::string& event_source) { Modified: main/trunk/src/states_screens/dialogs/addons_loading.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/addons_loading.hpp 2011-11-02 23:56:02 UTC (rev 10097) +++ main/trunk/src/states_screens/dialogs/addons_loading.hpp 2011-11-03 01:54:46 UTC (rev 10098) @@ -32,7 +32,7 @@ */ class AddonsLoading : public GUIEngine::ModalDialog { -//virtual void escapePressed() {}; + virtual void escapePressed(); private: GUIEngine::LabelWidget *m_state; GUIEngine::ProgressBarWidget *m_progress; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <au...@us...> - 2012-04-25 23:43:54
|
Revision: 11163 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11163&view=rev Author: auria Date: 2012-04-25 23:43:48 +0000 (Wed, 25 Apr 2012) Log Message: ----------- Defer closing player name dialog to avoid potential memory corruption/crashes Modified Paths: -------------- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp main/trunk/src/states_screens/dialogs/enter_player_name_dialog.hpp Modified: main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp 2012-04-25 22:53:49 UTC (rev 11162) +++ main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp 2012-04-25 23:43:48 UTC (rev 11163) @@ -39,6 +39,7 @@ ModalDialog(w, h) { m_listener = listener; + m_self_destroy = false; loadFromFile("enter_player_name_dialog.stkgui"); TextBoxWidget* textCtrl = getWidget<TextBoxWidget>("textfield"); @@ -128,6 +129,27 @@ UserConfigParams::m_all_players.push_back( new PlayerProfile(playerName) ); + // It's unsafe to delete from inside the event handler so we do it later + m_self_destroy = true; + } + else + { + LabelWidget* label = getWidget<LabelWidget>("title"); + label->setText(_("Cannot add a player with this name."), false); + sfx_manager->quickSound( "anvil" ); + } +} + +// ----------------------------------------------------------------------------- + +void EnterPlayerNameDialog::onUpdate(float dt) +{ + // It's unsafe to delete from inside the event handler so we do it later + if (m_self_destroy) + { + TextBoxWidget* textCtrl = getWidget<TextBoxWidget>("textfield"); + stringw playerName = textCtrl->getText(); + // irrLicht is too stupid to remove focus from deleted widgets // so do it by hand GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); @@ -142,14 +164,4 @@ if (listener != NULL) listener->onNewPlayerWithName( playerName ); } - else - { - LabelWidget* label = getWidget<LabelWidget>("title"); - label->setText(_("Cannot add a player with this name."), false); - sfx_manager->quickSound( "anvil" ); - } } - -// ----------------------------------------------------------------------------- - - Modified: main/trunk/src/states_screens/dialogs/enter_player_name_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.hpp 2012-04-25 22:53:49 UTC (rev 11162) +++ main/trunk/src/states_screens/dialogs/enter_player_name_dialog.hpp 2012-04-25 23:43:48 UTC (rev 11163) @@ -50,6 +50,7 @@ private: INewPlayerListener* m_listener; + bool m_self_destroy; public: @@ -63,6 +64,7 @@ void onEnterPressedInternal(); GUIEngine::EventPropagation processEvent(const std::string& eventSource); + virtual void onUpdate(float dt); //virtual void onTextUpdated(); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2012-04-26 22:16:11
|
Revision: 11167 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11167&view=rev Author: wardje Date: 2012-04-26 22:16:05 +0000 (Thu, 26 Apr 2012) Log Message: ----------- Fix #621 (trimming of spaces in name) Entered names are trimmed before checking for duplicates and the trimmed version is the one that gets saved. Modified Paths: -------------- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp main/trunk/src/states_screens/dialogs/player_info_dialog.cpp Modified: main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp 2012-04-26 22:07:07 UTC (rev 11166) +++ main/trunk/src/states_screens/dialogs/enter_player_name_dialog.cpp 2012-04-26 22:16:05 UTC (rev 11167) @@ -41,11 +41,11 @@ m_listener = listener; m_self_destroy = false; loadFromFile("enter_player_name_dialog.stkgui"); - + TextBoxWidget* textCtrl = getWidget<TextBoxWidget>("textfield"); assert(textCtrl != NULL); textCtrl->setFocusForPlayer(PLAYER_ID_GAME_MASTER); - + //if (translations->isRTLLanguage()) textCtrl->addListener(this); } @@ -95,12 +95,12 @@ processEvent(fakeEvent); return; } - + // ---- Otherwise, accept entered name TextBoxWidget* textCtrl = getWidget<TextBoxWidget>("textfield"); - stringw playerName = textCtrl->getText(); + stringw playerName = textCtrl->getText().trim(); const int size = playerName.size(); - + // sanity check int nonEmptyChars = 0; for (int n=0; n<size; n++) @@ -110,8 +110,8 @@ nonEmptyChars++; } } - - + + if (size > 0 && nonEmptyChars > 0) { // check for duplicates @@ -126,9 +126,9 @@ return; } } - + UserConfigParams::m_all_players.push_back( new PlayerProfile(playerName) ); - + // It's unsafe to delete from inside the event handler so we do it later m_self_destroy = true; } @@ -148,20 +148,20 @@ if (m_self_destroy) { TextBoxWidget* textCtrl = getWidget<TextBoxWidget>("textfield"); - stringw playerName = textCtrl->getText(); - + stringw playerName = textCtrl->getText().trim(); + // irrLicht is too stupid to remove focus from deleted widgets // so do it by hand GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); - + // we will destroy the dialog before notifying the listener to be safer. // but in order not to crash we must make a local copy of the listern // otherwise we will crash INewPlayerListener* listener = m_listener; - + ModalDialog::dismiss(); - + if (listener != NULL) listener->onNewPlayerWithName( playerName ); } } Modified: main/trunk/src/states_screens/dialogs/player_info_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/player_info_dialog.cpp 2012-04-26 22:07:07 UTC (rev 11166) +++ main/trunk/src/states_screens/dialogs/player_info_dialog.cpp 2012-04-26 22:16:05 UTC (rev 11167) @@ -42,7 +42,7 @@ PlayerInfoDialog::PlayerInfoDialog(PlayerProfile* player, const float w, const float h) : ModalDialog(w, h) { m_player = player; - + showRegularDialog(); } @@ -60,16 +60,16 @@ void PlayerInfoDialog::showRegularDialog() { clearWindow(); - + const int y1 = m_area.getHeight()/6; const int y2 = m_area.getHeight()*2/6; const int y3 = m_area.getHeight()*3/6; const int y4 = m_area.getHeight()*5/6; - + ScalableFont* font = GUIEngine::getFont(); const int textHeight = GUIEngine::getFontHeight(); const int buttonHeight = textHeight + 10; - + { textCtrl = new TextBoxWidget(); textCtrl->m_properties[PROP_ID] = "newname"; @@ -82,16 +82,16 @@ m_widgets.push_back(textCtrl); textCtrl->add(); } - + { ButtonWidget* widget = new ButtonWidget(); widget->m_properties[PROP_ID] = "renameplayer"; - + //I18N: In the player info dialog widget->setText( _("Rename") ); - + const int textWidth = font->getDimension( widget->getText().c_str() ).Width + 40; - + widget->m_x = m_area.getWidth()/2 - textWidth/2; widget->m_y = y2; widget->m_w = textWidth; @@ -104,10 +104,10 @@ ButtonWidget* widget = new ButtonWidget(); widget->m_properties[PROP_ID] = "cancel"; widget->setText( _("Cancel") ); - + const int textWidth = font->getDimension(widget->getText().c_str()).Width + 40; - + widget->m_x = m_area.getWidth()/2 - textWidth/2; widget->m_y = y3; widget->m_w = textWidth; @@ -116,17 +116,17 @@ m_widgets.push_back(widget); widget->add(); } - + { ButtonWidget* widget = new ButtonWidget(); widget->m_properties[PROP_ID] = "removeplayer"; - + //I18N: In the player info dialog widget->setText( _("Remove")); - + const int textWidth = font->getDimension(widget->getText().c_str()).Width + 40; - + widget->m_x = m_area.getWidth()/2 - textWidth/2; widget->m_y = y4; widget->m_w = textWidth; @@ -135,7 +135,7 @@ m_widgets.push_back(widget); widget->add(); } - + textCtrl->setFocusForPlayer( PLAYER_ID_GAME_MASTER ); } @@ -144,24 +144,24 @@ void PlayerInfoDialog::showConfirmDialog() { clearWindow(); - - + + IGUIFont* font = GUIEngine::getFont(); const int textHeight = GUIEngine::getFontHeight(); const int buttonHeight = textHeight + 10; - + irr::core::stringw message = //I18N: In the player info dialog (when deleting) _("Do you really want to delete player '%s' ?", m_player->getName()); - - + + if (unlock_manager->getCurrentSlotID() == m_player->getUniqueID()) { message = _("You cannot delete this player because it is currently in use."); } - + core::rect< s32 > area_left(5, 0, m_area.getWidth()-5, m_area.getHeight()/2); - + // When there is no need to tab through / click on images/labels, we can add directly // irrlicht labels (more complicated uses require the use of our widget set) IGUIStaticText* a = GUIEngine::getGUIEnv()->addStaticText( message.c_str(), @@ -173,13 +173,13 @@ { ButtonWidget* widget = new ButtonWidget(); widget->m_properties[PROP_ID] = "confirmremove"; - + //I18N: In the player info dialog (when deleting) widget->setText( _("Confirm Remove") ); - + const int textWidth = font->getDimension(widget->getText().c_str()).Width + 40; - + widget->m_x = m_area.getWidth()/2 - textWidth/2; widget->m_y = m_area.getHeight()/2; widget->m_w = textWidth; @@ -188,17 +188,17 @@ m_widgets.push_back(widget); widget->add(); } - + { ButtonWidget* widget = new ButtonWidget(); widget->m_properties[PROP_ID] = "cancelremove"; - + //I18N: In the player info dialog (when deleting) widget->setText( _("Cancel Remove") ); - + const int textWidth = font->getDimension( widget->getText().c_str() ).Width + 40; - + widget->m_x = m_area.getWidth()/2 - textWidth/2; widget->m_y = m_area.getHeight()*3/4; widget->m_w = textWidth; @@ -206,10 +206,10 @@ widget->setParent(m_irrlicht_window); m_widgets.push_back(widget); widget->add(); - + widget->setFocusForPlayer( PLAYER_ID_GAME_MASTER ); } - + } // ------------------------------------------------------------------------------------------------------ @@ -225,13 +225,13 @@ if (eventSource == "renameplayer") { // accept entered name - stringw playerName = textCtrl->getText(); - + stringw playerName = textCtrl->getText().trim(); + const int playerAmount = UserConfigParams::m_all_players.size(); for(int n=0; n<playerAmount; n++) { if (UserConfigParams::m_all_players.get(n) == m_player) continue; - + if (UserConfigParams::m_all_players[n].getName() == playerName) { ButtonWidget* label = getWidget<ButtonWidget>("renameplayer"); @@ -240,18 +240,18 @@ return GUIEngine::EVENT_BLOCK; } } - + if (playerName.size() <= 0) return GUIEngine::EVENT_BLOCK; OptionsScreenPlayers::getInstance()->renamePlayer( playerName, m_player ); - + // irrLicht is too stupid to remove focus from deleted widgets // so do it by hand GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); - + ModalDialog::dismiss(); - + dismiss(); return GUIEngine::EVENT_BLOCK; } @@ -264,12 +264,12 @@ { OptionsScreenPlayers::getInstance()->deletePlayer( m_player ); m_player = NULL; - + // irrLicht is too stupid to remove focus from deleted widgets // so do it by hand GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); - + ModalDialog::dismiss(); return GUIEngine::EVENT_BLOCK; } @@ -279,12 +279,12 @@ return GUIEngine::EVENT_BLOCK; } else if(eventSource == "cancel") - { + { // irrLicht is too stupid to remove focus from deleted widgets // so do it by hand GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); - + ModalDialog::dismiss(); return GUIEngine::EVENT_BLOCK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2013-01-19 14:52:47
|
Revision: 12390 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=12390&view=rev Author: funto66 Date: 2013-01-19 14:52:40 +0000 (Sat, 19 Jan 2013) Log Message: ----------- Added an instructions message when connecting wiimotes Modified Paths: -------------- main/trunk/src/states_screens/dialogs/add_device_dialog.cpp main/trunk/src/states_screens/dialogs/add_device_dialog.hpp Modified: main/trunk/src/states_screens/dialogs/add_device_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/add_device_dialog.cpp 2013-01-19 00:50:48 UTC (rev 12389) +++ main/trunk/src/states_screens/dialogs/add_device_dialog.cpp 2013-01-19 14:52:40 UTC (rev 12390) @@ -24,9 +24,11 @@ #include "guiengine/widgets/button_widget.hpp" #include "input/device_manager.hpp" #include "input/input_manager.hpp" +#include "states_screens/dialogs/message_dialog.hpp" #include "states_screens/options_screen_players.hpp" #include "states_screens/options_screen_input.hpp" #include "states_screens/state_manager.hpp" +#include "utils/cpp2011.h" #include "utils/string_utils.hpp" #include "utils/translation.hpp" #include "input/wiimote_manager.hpp" @@ -150,7 +152,36 @@ } // onEnterPressedInternal // ---------------------------------------------------------------------------- +#ifdef ENABLE_WIIUSE +class WiimoteDialogListener : public MessageDialog::IConfirmDialogListener +{ +public: + virtual void onConfirm() OVERRIDE + { + ModalDialog::dismiss(); + + wiimote_manager->launchDetection(5); + + int nb_wiimotes = wiimote_manager->getNbWiimotes(); + if(nb_wiimotes > 0) + { + core::stringw msg = StringUtils::insertValues( + _("Found %d wiimote(s)"), + core::stringw(nb_wiimotes)); + + new MessageDialog( msg ); + + ((OptionsScreenInput*)GUIEngine::getCurrentScreen())->rebuildDeviceList(); + } + else + { + new MessageDialog( _("Could not detect any wiimote :/") ); + } + } +}; +#endif +// ---------------------------------------------------------------------------- GUIEngine::EventPropagation AddDeviceDialog::processEvent (const std::string& eventSource) { @@ -173,38 +204,12 @@ #ifdef ENABLE_WIIUSE else if (eventSource == "addwiimote") { - //new MessageDialog( _("Press the buttons 1+2 of your wiimote..."), MessageDialog::MESSAGE_DIALOG_OK, this, false); - //new MessageDialog( _("Press the buttons 1+2 of your wiimote...")); - - wiimote_manager->launchDetection(5); - - int nb_wiimotes = wiimote_manager->getNbWiimotes(); - if(nb_wiimotes > 0) - { - core::stringw msg = StringUtils::insertValues( - _("Found %d wiimote(s)"), - core::stringw(nb_wiimotes)); - - new MessageDialog( msg ); - - ((OptionsScreenInput*)GUIEngine::getCurrentScreen())->rebuildDeviceList(); - } - else - { - new MessageDialog( _("Could not detect any wiimote :/") ); - } - + new MessageDialog( _("Press the buttons 1+2 simultaneously on your wiimote to put " + "it in discovery mode, then click on OK."), + MessageDialog::MESSAGE_DIALOG_CONFIRM, new WiimoteDialogListener(), true); return GUIEngine::EVENT_BLOCK; } #endif return GUIEngine::EVENT_LET; } // processEvent - -// ---------------------------------------------------------------------------- - -void AddDeviceDialog::onConfirm() -{ - ModalDialog::dismiss(); - printf("TEST\n"); -} Modified: main/trunk/src/states_screens/dialogs/add_device_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/add_device_dialog.hpp 2013-01-19 00:50:48 UTC (rev 12389) +++ main/trunk/src/states_screens/dialogs/add_device_dialog.hpp 2013-01-19 14:52:40 UTC (rev 12390) @@ -21,16 +21,13 @@ #include "config/player.hpp" #include "guiengine/modaldialog.hpp" -#include "states_screens/dialogs/message_dialog.hpp" -#include "utils/cpp2011.h" /** * \brief Dialog that warns the user about the potential problems of * creating multiple keyboard configs. * \ingroup states_screens */ -class AddDeviceDialog : public GUIEngine::ModalDialog, - public MessageDialog::IConfirmDialogListener +class AddDeviceDialog : public GUIEngine::ModalDialog { public: @@ -38,8 +35,6 @@ void onEnterPressedInternal(); GUIEngine::EventPropagation processEvent(const std::string& eventSource); - - virtual void onConfirm() OVERRIDE; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hik...@us...> - 2013-06-19 09:14:13
|
Revision: 12885 http://sourceforge.net/p/supertuxkart/code/12885 Author: hikerstk Date: 2013-06-19 09:14:10 +0000 (Wed, 19 Jun 2013) Log Message: ----------- Fix #989: be able to use other devices than mouse for the addons loading menu. THanks to xenux for the patch. Modified Paths: -------------- main/trunk/src/states_screens/dialogs/addons_loading.cpp main/trunk/src/states_screens/dialogs/addons_loading.hpp Modified: main/trunk/src/states_screens/dialogs/addons_loading.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/addons_loading.cpp 2013-06-19 01:12:45 UTC (rev 12884) +++ main/trunk/src/states_screens/dialogs/addons_loading.cpp 2013-06-19 09:14:10 UTC (rev 12885) @@ -189,12 +189,12 @@ { flags->getIrrlichtElement<IGUIStaticText>()->setOverrideFont(GUIEngine::getSmallFont()); } -} +} // init // ---------------------------------------------------------------------------- void AddonsLoading::escapePressed() { - processEvent("back"); + stopDownload(); ModalDialog::dismiss(); } // escapePressed @@ -203,46 +203,43 @@ GUIEngine::EventPropagation AddonsLoading::processEvent(const std::string& event_source) { - if(event_source == "back") + GUIEngine::RibbonWidget* actions_ribbon = + getWidget<GUIEngine::RibbonWidget>("actions"); + + if (event_source == "actions") { - // Cancel a download only if we are installing/upgrading one - // (and not uninstalling an installed one): - if(m_download_request) + const std::string& selection = + actions_ribbon->getSelectionIDString(PLAYER_ID_GAME_MASTER); + + if(selection == "back") { - assert(m_download_request); - // In case of a cancel we can't free the memory, since - // network_http will potentially update the request. So in - // order to avoid a memory leak, we let network_http free - // the request. - m_download_request->setManageMemory(true); - m_download_request->cancel(); + stopDownload(); + dismiss(); + return GUIEngine::EVENT_BLOCK; } - dismiss(); - return GUIEngine::EVENT_BLOCK; - } - else if(event_source == "install") - { - // Only display the progress bar etc. if we are - // not uninstalling an addon. - if(!m_addon.isInstalled() || m_addon.needsUpdate()) + else if(selection == "install") { - m_progress->setValue(0); - m_progress->setVisible(true); - // Change the 'back' button into a 'cancel' button. - m_back_button->setLabel(_("Cancel")); + // Only display the progress bar etc. if we are + // not uninstalling an addon. + if(!m_addon.isInstalled() || m_addon.needsUpdate()) + { + m_progress->setValue(0); + m_progress->setVisible(true); + // Change the 'back' button into a 'cancel' button. + m_back_button->setLabel(_("Cancel")); - RibbonWidget* r = getWidget<RibbonWidget>("actions"); - r->setVisible(false); + actions_ribbon->setVisible(false); - startDownload(); + startDownload(); + } + return GUIEngine::EVENT_BLOCK; } - return GUIEngine::EVENT_BLOCK; + else if (selection == "uninstall") + { + doUninstall(); + return GUIEngine::EVENT_BLOCK; + } } - else if (event_source == "uninstall") - { - doUninstall(); - return GUIEngine::EVENT_BLOCK; - } return GUIEngine::EVENT_LET; } // processEvent @@ -296,6 +293,26 @@ } // startDownload // ---------------------------------------------------------------------------- +/** This function is called when the user click on 'Back', 'Cancel' or press + * escape. + **/ +void AddonsLoading::stopDownload() +{ + // Cancel a download only if we are installing/upgrading one + // (and not uninstalling an installed one): + if(m_download_request) + { + // In case of a cancel we can't free the memory, since + // network_http will potentially update the request. So in + // order to avoid a memory leak, we let network_http free + // the request. + m_download_request->setManageMemory(true); + m_download_request->cancel(); + }; +} // startDownload + + +// ---------------------------------------------------------------------------- /** Called when the asynchronous download of the addon finished. */ void AddonsLoading::doInstall() Modified: main/trunk/src/states_screens/dialogs/addons_loading.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/addons_loading.hpp 2013-06-19 01:12:45 UTC (rev 12884) +++ main/trunk/src/states_screens/dialogs/addons_loading.hpp 2013-06-19 09:14:10 UTC (rev 12885) @@ -44,6 +44,7 @@ /** The addon to load. */ Addon m_addon; void startDownload(); + void stopDownload(); void doInstall(); void doUninstall(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |