Filter worlds by selected game

master
Perttu Ahola 2013-02-15 22:06:38 +02:00
parent 084be3599a
commit 2708482f1b
2 changed files with 19 additions and 6 deletions

View File

@ -348,11 +348,17 @@ void GUIMainMenu::regenerateGui(v2u32 screensize)
gui::IGUIListBox *e = Environment->addListBox(rect, this, gui::IGUIListBox *e = Environment->addListBox(rect, this,
GUI_ID_WORLD_LISTBOX); GUI_ID_WORLD_LISTBOX);
e->setDrawBackground(true); e->setDrawBackground(true);
for(std::vector<WorldSpec>::const_iterator i = m_data->worlds.begin(); m_world_indices.clear();
i != m_data->worlds.end(); i++){ for(size_t wi = 0; wi < m_data->worlds.size(); wi++){
e->addItem(narrow_to_wide(i->name+" ["+i->gameid+"]").c_str()); const WorldSpec &spec = m_data->worlds[wi];
if(spec.gameid == m_data->selected_game){
//e->addItem(narrow_to_wide(spec.name+" ["+spec.gameid+"]").c_str());
e->addItem(narrow_to_wide(spec.name).c_str());
m_world_indices.push_back(wi);
if(m_data->selected_world == (int)wi)
e->setSelected(m_world_indices.size()-1);
}
} }
e->setSelected(m_data->selected_world);
Environment->setFocus(e); Environment->setFocus(e);
} }
// Delete world button // Delete world button
@ -1131,8 +1137,13 @@ void GUIMainMenu::readInput(MainMenuData *dst)
{ {
gui::IGUIElement *e = getElementFromId(GUI_ID_WORLD_LISTBOX); gui::IGUIElement *e = getElementFromId(GUI_ID_WORLD_LISTBOX);
if(e != NULL && e->getType() == gui::EGUIET_LIST_BOX) if(e != NULL && e->getType() == gui::EGUIET_LIST_BOX){
dst->selected_world = ((gui::IGUIListBox*)e)->getSelected(); int list_i = ((gui::IGUIListBox*)e)->getSelected();
if(list_i == -1)
dst->selected_world = -1;
else
dst->selected_world = m_world_indices[list_i];
}
} }
{ {
ServerListSpec server = ServerListSpec server =

View File

@ -130,6 +130,8 @@ private:
s32 id; s32 id;
IMenuManager *menumgr; IMenuManager *menumgr;
std::vector<int> m_world_indices;
bool m_is_regenerating; bool m_is_regenerating;
v2s32 m_topleft_client; v2s32 m_topleft_client;
v2s32 m_size_client; v2s32 m_size_client;