From dfd1912c33df01d309845a0d51549ad09a846696 Mon Sep 17 00:00:00 2001 From: Benau Date: Sun, 14 Nov 2021 16:11:21 +0800 Subject: [PATCH] Add track searching to network track screen --- data/gui/screens/tracks.stkgui | 4 +++- src/states_screens/online/tracks_screen.cpp | 17 +++++++++++++++++ src/states_screens/online/tracks_screen.hpp | 10 +++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/data/gui/screens/tracks.stkgui b/data/gui/screens/tracks.stkgui index 3b7be2d39..7da0a1ec6 100644 --- a/data/gui/screens/tracks.stkgui +++ b/data/gui/screens/tracks.stkgui @@ -36,11 +36,13 @@
-
+
+ +
diff --git a/src/states_screens/online/tracks_screen.cpp b/src/states_screens/online/tracks_screen.cpp index bed31b0bb..f8a26db0f 100644 --- a/src/states_screens/online/tracks_screen.cpp +++ b/src/states_screens/online/tracks_screen.cpp @@ -219,6 +219,7 @@ void TracksScreen::beforeAddingWidget() Screen::init(); m_selected_track = NULL; + m_search_track = NULL; m_timer = getWidget("timer"); m_timer->showLabel(false); @@ -367,7 +368,14 @@ void TracksScreen::beforeAddingWidget() void TracksScreen::init() { if (m_network_tracks) + { + m_search_track = getWidget("search_track"); + m_search_track->setText(L""); + // Add listener for incremental update when search text is changed + m_search_track->clearListeners(); + m_search_track->addListener(this); updateProgressBarText(); + } // change the back button image (because it makes the game quit) if (m_quit_server) @@ -563,6 +571,15 @@ void TracksScreen::buildTrackList() for (int n = 0; n < track_amount; n++) { Track* curr = track_manager->getTrack(n); + core::stringw search_text; + if (m_search_track) + { + search_text = m_search_track->getText(); + search_text.make_lower(); + } + if (!search_text.empty() && + curr->getName().make_lower().find(search_text.c_str()) == -1) + continue; if (RaceManager::get()->getMinorMode() == RaceManager::MINOR_MODE_EASTER_EGG && !curr->hasEasterEggs()) continue; diff --git a/src/states_screens/online/tracks_screen.hpp b/src/states_screens/online/tracks_screen.hpp index 3b38b2b63..227194c71 100644 --- a/src/states_screens/online/tracks_screen.hpp +++ b/src/states_screens/online/tracks_screen.hpp @@ -19,6 +19,7 @@ #define HEADER_TRACKS_SCREEN_HPP #include "guiengine/screen.hpp" +#include "guiengine/widgets/text_box_widget.hpp" #include #include @@ -50,7 +51,8 @@ namespace irr * \ingroup states_screens */ class TracksScreen : public GUIEngine::Screen, - public GUIEngine::ScreenSingleton + public GUIEngine::ScreenSingleton, + public GUIEngine::ITextBoxWidgetListener { friend class GUIEngine::ScreenSingleton; @@ -60,6 +62,7 @@ private: GUIEngine::CheckBoxWidget* m_reversed; GUIEngine::SpinnerWidget* m_laps; GUIEngine::ListWidget* m_vote_list; + GUIEngine::TextBoxWidget* m_search_track; /** Pointer to progress bar widget which is used as a timer * (going backwards). */ @@ -147,6 +150,11 @@ public: } // ------------------------------------------------------------------------ void updatePlayerVotes(); + // ------------------------------------------------------------------------ + virtual void onTextUpdated() OVERRIDE + { + eventCallback(m_search_track, "trackgroups", 0); + } }; #endif