diff --git a/src/guiMainMenu.cpp b/src/guiMainMenu.cpp index cb9fe43a..34647133 100644 --- a/src/guiMainMenu.cpp +++ b/src/guiMainMenu.cpp @@ -145,8 +145,6 @@ void GUIMainMenu::regenerateGui(v2u32 screensize) */ readInput(m_data); - int active_tab = getTab(); - /* Remove stuff */ @@ -177,7 +175,7 @@ void GUIMainMenu::regenerateGui(v2u32 screensize) changeCtype(""); // Version - if(active_tab != TAB_CREDITS) + if(m_data->selected_tab != TAB_CREDITS) { core::rect rect(0, 0, size.X, 40); rect += v2s32(4, 0); @@ -195,7 +193,7 @@ void GUIMainMenu::regenerateGui(v2u32 screensize) m_topleft_server = c800 + v2s32(90, 70+30+50+290); m_size_server = v2s32(620, 140); - if(active_tab == TAB_ADVANCED) + if(m_data->selected_tab == TAB_ADVANCED) { m_topleft_client = c800 + v2s32(90, 20+50+30); m_size_client = v2s32(620, 270); @@ -215,11 +213,11 @@ void GUIMainMenu::regenerateGui(v2u32 screensize) e->addTab(L"Multiplayer"); e->addTab(L"Advanced"); e->addTab(L"Credits"); - e->setActiveTab(active_tab); + e->setActiveTab(m_data->selected_tab); } #endif - if(active_tab == TAB_SINGLEPLAYER) + if(m_data->selected_tab == TAB_SINGLEPLAYER) { // HYBRID { @@ -262,6 +260,7 @@ void GUIMainMenu::regenerateGui(v2u32 screensize) e->addItem(narrow_to_wide(i->name+" ["+i->gameid+"]").c_str()); } e->setSelected(m_data->selected_world); + Environment->setFocus(e); } // Delete world button { @@ -351,7 +350,7 @@ void GUIMainMenu::regenerateGui(v2u32 screensize) } changeCtype("C"); } - else if(active_tab == TAB_MULTIPLAYER) + else if(m_data->selected_tab == TAB_MULTIPLAYER) { changeCtype(""); // CLIENT @@ -456,7 +455,7 @@ void GUIMainMenu::regenerateGui(v2u32 screensize) } changeCtype("C"); } - else if(active_tab == TAB_ADVANCED) + else if(m_data->selected_tab == TAB_ADVANCED) { changeCtype(""); // CLIENT @@ -619,7 +618,7 @@ void GUIMainMenu::regenerateGui(v2u32 screensize) } changeCtype("C"); } - else if(active_tab == TAB_CREDITS) + else if(m_data->selected_tab == TAB_CREDITS) { // CREDITS { @@ -716,6 +715,11 @@ void GUIMainMenu::drawMenu() void GUIMainMenu::readInput(MainMenuData *dst) { + { + gui::IGUIElement *e = getElementFromId(GUI_ID_TAB_CONTROL); + if(e != NULL && e->getType() == gui::EGUIET_TAB_CONTROL) + dst->selected_tab = ((gui::IGUITabControl*)e)->getActiveTab(); + } if(getTab() == TAB_SINGLEPLAYER) { dst->name = L"singleplayer"; @@ -940,7 +944,6 @@ int GUIMainMenu::getTab() gui::IGUIElement *e = getElementFromId(GUI_ID_TAB_CONTROL); if(e != NULL && e->getType() == gui::EGUIET_TAB_CONTROL) return ((gui::IGUITabControl*)e)->getActiveTab(); - //return TAB_ADVANCED; // Default return TAB_SINGLEPLAYER; // Default } diff --git a/src/guiMainMenu.h b/src/guiMainMenu.h index 397c2f7c..5cb0f8e2 100644 --- a/src/guiMainMenu.h +++ b/src/guiMainMenu.h @@ -30,6 +30,8 @@ class IGameCallback; struct MainMenuData { // These are in the native format of the gui elements + // Generic + int selected_tab; // Client options std::wstring address; std::wstring port; @@ -52,6 +54,8 @@ struct MainMenuData std::vector games; MainMenuData(): + // Generic + selected_tab(0), // Client opts fancy_trees(false), smooth_lighting(false), diff --git a/src/main.cpp b/src/main.cpp index 38a3b725..2925f048 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1276,6 +1276,8 @@ int main(int argc, char *argv[]) // Initialize menu data MainMenuData menudata; + if(g_settings->exists("selected_mainmenu_tab")) + menudata.selected_tab = g_settings->getS32("selected_mainmenu_tab"); menudata.address = narrow_to_wide(address); menudata.name = narrow_to_wide(playername); menudata.port = narrow_to_wide(itos(port)); @@ -1362,15 +1364,41 @@ int main(int argc, char *argv[]) sleep_ms(25); } - // Break out of menu-game loop to shut down cleanly - if(device->run() == false || kill == true) - break; - infostream<<"Dropping main menu"<drop(); } + playername = wide_to_narrow(menudata.name); + password = translatePassword(playername, menudata.password); + //infostream<<"Main: password hash: '"<setS32("selected_mainmenu_tab", menudata.selected_tab); + g_settings->set("new_style_leaves", itos(menudata.fancy_trees)); + g_settings->set("smooth_lighting", itos(menudata.smooth_lighting)); + g_settings->set("enable_3d_clouds", itos(menudata.clouds_3d)); + g_settings->set("opaque_water", itos(menudata.opaque_water)); + g_settings->set("creative_mode", itos(menudata.creative_mode)); + g_settings->set("enable_damage", itos(menudata.enable_damage)); + g_settings->set("name", playername); + g_settings->set("address", address); + g_settings->set("port", itos(port)); + if(menudata.selected_world != -1) + g_settings->set("selected_world_path", + worldspecs[menudata.selected_world].path); + /*// Update configuration file + if(configpath != "") + g_settings->updateConfigFile(configpath.c_str());*/ + + // Break out of menu-game loop to shut down cleanly + if(device->run() == false || kill == true) + break; + // Set world path to selected one if(menudata.selected_world != -1){ worldspec = worldspecs[menudata.selected_world]; @@ -1406,31 +1434,6 @@ int main(int argc, char *argv[]) continue; } - playername = wide_to_narrow(menudata.name); - password = translatePassword(playername, menudata.password); - //infostream<<"Main: password hash: '"<set("new_style_leaves", itos(menudata.fancy_trees)); - g_settings->set("smooth_lighting", itos(menudata.smooth_lighting)); - g_settings->set("enable_3d_clouds", itos(menudata.clouds_3d)); - g_settings->set("opaque_water", itos(menudata.opaque_water)); - g_settings->set("creative_mode", itos(menudata.creative_mode)); - g_settings->set("enable_damage", itos(menudata.enable_damage)); - g_settings->set("name", playername); - g_settings->set("address", address); - g_settings->set("port", itos(port)); - if(menudata.selected_world != -1) - g_settings->set("selected_world_path", - worldspecs[menudata.selected_world].path); - // Update configuration file - if(configpath != "") - g_settings->updateConfigFile(configpath.c_str()); - // If local game if(address == "") {