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