Filter worlds by selected game
authorPerttu Ahola <celeron55@gmail.com>
Fri, 15 Feb 2013 20:06:38 +0000 (22:06 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Thu, 2 May 2013 16:43:47 +0000 (19:43 +0300)
src/guiMainMenu.cpp
src/guiMainMenu.h

index 07efbb62f853334673bb37a8602fc1c968d099c9..2e7fb955d6c03b253c76a7ca7796954d8271f93d 100644 (file)
@@ -348,11 +348,17 @@ void GUIMainMenu::regenerateGui(v2u32 screensize)
                        gui::IGUIListBox *e = Environment->addListBox(rect, this,
                                        GUI_ID_WORLD_LISTBOX);
                        e->setDrawBackground(true);
-                       for(std::vector<WorldSpec>::const_iterator i = m_data->worlds.begin();
-                                       i != m_data->worlds.end(); i++){
-                               e->addItem(narrow_to_wide(i->name+" ["+i->gameid+"]").c_str());
+                       m_world_indices.clear();
+                       for(size_t wi = 0; wi < m_data->worlds.size(); wi++){
+                               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);
                }
                // Delete world button
@@ -1131,8 +1137,13 @@ void GUIMainMenu::readInput(MainMenuData *dst)
 
        {
                gui::IGUIElement *e = getElementFromId(GUI_ID_WORLD_LISTBOX);
-               if(e != NULL && e->getType() == gui::EGUIET_LIST_BOX)
-                       dst->selected_world = ((gui::IGUIListBox*)e)->getSelected();
+               if(e != NULL && e->getType() == gui::EGUIET_LIST_BOX){
+                       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 =
index b0c9ff24b9583f846d256434230988367fc05acb..1c5ca4d37d46e20e69494b4966b38d201dd4a99c 100644 (file)
@@ -130,6 +130,8 @@ private:
        s32 id;
        IMenuManager *menumgr;
 
+       std::vector<int> m_world_indices;
+
        bool m_is_regenerating;
        v2s32 m_topleft_client;
        v2s32 m_size_client;