Mainmenu: Refactor tab UI code
authorRui914 <rui914t@gmail.com>
Thu, 31 Mar 2016 08:26:39 +0000 (17:26 +0900)
committerkwolekr <kwolekr@minetest.net>
Fri, 8 Apr 2016 06:25:04 +0000 (02:25 -0400)
 - Use local variables for tabs in place of globals
 - Merge together if statements where possible
 - Replace manual table searching code with indexof where possible

builtin/init.lua
builtin/mainmenu/init.lua
builtin/mainmenu/init_simple.lua
builtin/mainmenu/tab_credits.lua
builtin/mainmenu/tab_mods.lua
builtin/mainmenu/tab_multiplayer.lua
builtin/mainmenu/tab_server.lua
builtin/mainmenu/tab_settings.lua
builtin/mainmenu/tab_simple_main.lua
builtin/mainmenu/tab_singleplayer.lua
builtin/mainmenu/tab_texturepacks.lua

index 6b27cf76e16d99694165da80d2a3eddb4f4c68ff..4400a19d61b1ca5a0a2c6a806e63250d18468095 100644 (file)
@@ -12,7 +12,7 @@ if core.print then
        -- Override native print and use
        -- terminal if that's turned on
        function print(...)
-               local n, t = select("#", ...), { ... }
+               local n, t = select("#", ...), {...}
                for i = 1, n do
                        t[i] = tostring(t[i])
                end
@@ -25,26 +25,26 @@ os.setlocale("C", "numeric")
 minetest = core
 
 -- Load other files
-local scriptdir = core.get_builtin_path()..DIR_DELIM
-local gamepath = scriptdir.."game"..DIR_DELIM
-local commonpath = scriptdir.."common"..DIR_DELIM
-local asyncpath = scriptdir.."async"..DIR_DELIM
+local scriptdir = core.get_builtin_path() .. DIR_DELIM
+local gamepath = scriptdir .. "game" .. DIR_DELIM
+local commonpath = scriptdir .. "common" .. DIR_DELIM
+local asyncpath = scriptdir .. "async" .. DIR_DELIM
 
-dofile(commonpath.."strict.lua")
-dofile(commonpath.."serialize.lua")
-dofile(commonpath.."misc_helpers.lua")
+dofile(commonpath .. "strict.lua")
+dofile(commonpath .. "serialize.lua")
+dofile(commonpath .. "misc_helpers.lua")
 
 if INIT == "game" then
-       dofile(gamepath.."init.lua")
+       dofile(gamepath .. "init.lua")
 elseif INIT == "mainmenu" then
        local mainmenuscript = core.setting_get("main_menu_script")
        if mainmenuscript ~= nil and mainmenuscript ~= "" then
                dofile(mainmenuscript)
        else
-               dofile(core.get_mainmenu_path()..DIR_DELIM.."init.lua")
+               dofile(core.get_mainmenu_path() .. DIR_DELIM .. "init.lua")
        end
 elseif INIT == "async" then
-       dofile(asyncpath.."init.lua")
+       dofile(asyncpath .. "init.lua")
 else
        error(("Unrecognized builtin initialization type %s!"):format(tostring(INIT)))
 end
index 69536630dc393b7446b70f9065c20d35a05ce2d8..6dd345ff476c1ca43f74a6c6519b4e02246b769f 100644 (file)
@@ -37,23 +37,29 @@ dofile(menupath .. DIR_DELIM .. "common.lua")
 dofile(menupath .. DIR_DELIM .. "gamemgr.lua")
 dofile(menupath .. DIR_DELIM .. "modmgr.lua")
 dofile(menupath .. DIR_DELIM .. "store.lua")
+dofile(menupath .. DIR_DELIM .. "textures.lua")
+
 dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua")
-dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
-dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
-dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
 dofile(menupath .. DIR_DELIM .. "dlg_settings_advanced.lua")
 if PLATFORM ~= "Android" then
        dofile(menupath .. DIR_DELIM .. "dlg_create_world.lua")
        dofile(menupath .. DIR_DELIM .. "dlg_delete_mod.lua")
        dofile(menupath .. DIR_DELIM .. "dlg_delete_world.lua")
        dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua")
-       dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua")
-       dofile(menupath .. DIR_DELIM .. "tab_server.lua")
-       dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua")
-       dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
-       dofile(menupath .. DIR_DELIM .. "textures.lua")
+end
+
+local tabs = {}
+
+tabs.settings = dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
+tabs.mods = dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
+tabs.credits = dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
+if PLATFORM == "Android" then
+       tabs.simple_main = dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
 else
-       dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
+       tabs.singleplayer = dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua")
+       tabs.multiplayer = dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua")
+       tabs.server = dofile(menupath .. DIR_DELIM .. "tab_server.lua")
+       tabs.texturepacks = dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
 end
 
 --------------------------------------------------------------------------------
@@ -69,8 +75,19 @@ local function init_globals()
        -- Init gamedata
        gamedata.worldindex = 0
 
+       if PLATFORM == "Android" then
+               local world_list = core.get_worlds()
+               local world_index = table.indexof(world_list, "singleplayerworld")
 
-       if PLATFORM ~= "Android" then
+               if world_index == -1 then
+                       core.create_world("singleplayerworld", 1)
+
+                       world_list = core.get_worlds()
+                       world_index = table.indexof(world_list, "singleplayerworld")
+               end
+
+               gamedata.worldindex = world_index
+       else
                menudata.worldlist = filterlist.create(
                        core.get_worlds,
                        compare_worlds,
@@ -89,61 +106,34 @@ local function init_globals()
 
                if not core.setting_get("menu_last_game") then
                        local default_game = core.setting_get("default_game") or "minetest"
-                       core.setting_set("menu_last_game", default_game )
+                       core.setting_set("menu_last_game", default_game)
                end
 
                mm_texture.init()
-       else
-               local world_list = core.get_worlds()
-
-               local found_singleplayerworld = false
-
-               for i,world in pairs(world_list) do
-                       if world.name == "singleplayerworld" then
-                               found_singleplayerworld = true
-                               gamedata.worldindex = i
-                               break
-                       end
-               end
-
-               if not found_singleplayerworld then
-                       core.create_world("singleplayerworld", 1)
-
-                       local world_list = core.get_worlds()
-
-                       for i,world in pairs(world_list) do
-                               if world.name == "singleplayerworld" then
-                                       gamedata.worldindex = i
-                                       break
-                               end
-                       end
-               end
        end
 
        -- Create main tabview
-       local tv_main = tabview_create("maintab",{x=12,y=5.2},{x=0,y=0})
-       if PLATFORM ~= "Android" then
-               tv_main:set_autosave_tab(true)
-       end
-       if PLATFORM ~= "Android" then
-               tv_main:add(tab_singleplayer)
-               tv_main:add(tab_multiplayer)
-               tv_main:add(tab_server)
+       local tv_main = tabview_create("maintab", {x = 12, y = 5.2}, {x = 0, y = 0})
+
+       if PLATFORM == "Android" then
+               tv_main:add(tabs.simple_main)
+               tv_main:add(tabs.settings)
        else
-               tv_main:add(tab_simple_main)
-       end
-       tv_main:add(tab_settings)
-       if PLATFORM ~= "Android" then
-               tv_main:add(tab_texturepacks)
+               tv_main:set_autosave_tab(true)
+               tv_main:add(tabs.singleplayer)
+               tv_main:add(tabs.multiplayer)
+               tv_main:add(tabs.server)
+               tv_main:add(tabs.settings)
+               tv_main:add(tabs.texturepacks)
        end
-       tv_main:add(tab_mods)
-       tv_main:add(tab_credits)
 
-       tv_main:set_global_event_handler(main_event_handler)
+       tv_main:add(tabs.mods)
+       tv_main:add(tabs.credits)
 
+       tv_main:set_global_event_handler(main_event_handler)
        tv_main:set_fixed_size(false)
 
-       if not (PLATFORM == "Android") then
+       if PLATFORM ~= "Android" then
                tv_main:set_tab(core.setting_get("maintab_LAST"))
        end
        ui.set_default("maintab")
@@ -151,9 +141,9 @@ local function init_globals()
 
        -- Create modstore ui
        if PLATFORM == "Android" then
-               modstore.init({x=12, y=6}, 3, 2)
+               modstore.init({x = 12, y = 6}, 3, 2)
        else
-               modstore.init({x=12, y=8}, 4, 3)
+               modstore.init({x = 12, y = 8}, 4, 3)
        end
 
        ui.update()
index c3891d21cef5f7c7d42427237b57a20a6b91024a..298bd834e45e93723d2d8157eaff4a6bddfea252 100644 (file)
@@ -1,4 +1,4 @@
 -- helper file to be able to debug the simple menu on PC
 -- without messing around with actual menu code!
-PLATFORM="Android"
+PLATFORM = "Android"
 dofile("builtin/mainmenu/init.lua")
index 5cb730b3811df4600f6a32742ac22d563a14edd3..822f64844227db2cfc84eca298c3706449a8458b 100644 (file)
@@ -69,7 +69,7 @@ local previous_contributors = {
        "Zefram <zefram@fysh.org>",
 }
 
-tab_credits = {
+return {
        name = "credits",
        caption = fgettext("Credits"),
        cbf_formspec = function(tabview, name, tabdata)
index af758f8dfb0c1fb48fca4b3102f9770d7d78b7ff..69027c015db06cee8b6b219b0b096f64475fb297 100644 (file)
@@ -163,7 +163,7 @@ local function handle_buttons(tabview, fields, tabname, tabdata)
 end
 
 --------------------------------------------------------------------------------
-tab_mods = {
+return {
        name = "mods",
        caption = fgettext("Mods"),
        cbf_formspec = get_formspec,
index 2072f8c38cb9c9505af09c96a6bb8a91b5a9bdd6..06d8791f0fd634850bd79e936ed64ab30edea1d8 100644 (file)
@@ -256,10 +256,10 @@ local function on_change(type,old_tab,new_tab)
 end
 
 --------------------------------------------------------------------------------
-tab_multiplayer = {
+return {
        name = "multiplayer",
        caption = fgettext("Client"),
        cbf_formspec = get_formspec,
        cbf_button_handler = main_button_handler,
        on_change = on_change
-       }
+}
index d08eecc21a104f951f8a2230edded5568d1b2c7b..6b96825a0fbd6b3f38255cba7ed80b44837a381c 100644 (file)
@@ -186,10 +186,10 @@ local function main_button_handler(this, fields, name, tabdata)
 end
 
 --------------------------------------------------------------------------------
-tab_server = {
+return {
        name = "server",
        caption = fgettext("Server"),
        cbf_formspec = get_formspec,
        cbf_button_handler = main_button_handler,
        on_change = nil
-       }
+}
index 6285968eb784521965fa71584b2bc12a0b83ecd3..2649a8a579f96ab401bb5666652672c9931a4ee4 100644 (file)
@@ -384,7 +384,7 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
        return ddhandled
 end
 
-tab_settings = {
+return {
        name = "settings",
        caption = fgettext("Settings"),
        cbf_formspec = formspec,
index 434113b5f662155b7bff60d59686b0b66668a1a0..b32418938d06ee33fe5841fc84141e21147b9d3d 100644 (file)
@@ -196,10 +196,10 @@ local function on_activate(type,old_tab,new_tab)
 end
 
 --------------------------------------------------------------------------------
-tab_simple_main = {
+return {
        name = "main",
        caption = fgettext("Main"),
        cbf_formspec = get_formspec,
        cbf_button_handler = main_button_handler,
        on_change = on_activate
-       }
+}
index a40918af9548b4ae1991bb82a1a86117e175b365..05060cbc612d72c8950663364058dd12dda9d505 100644 (file)
@@ -241,10 +241,10 @@ local function on_change(type, old_tab, new_tab)
 end
 
 --------------------------------------------------------------------------------
-tab_singleplayer = {
+return {
        name = "singleplayer",
        caption = fgettext("Singleplayer"),
        cbf_formspec = get_formspec,
        cbf_button_handler = main_button_handler,
        on_change = on_change
-       }
+}
index 2b0c77afcebbedef256151105c5c4c91ce31c758..a102fd61d67e2b9d20f90de65eb10c2c47aa1b3d 100644 (file)
@@ -123,10 +123,10 @@ local function main_button_handler(tabview, fields, name, tabdata)
 end
 
 --------------------------------------------------------------------------------
-tab_texturepacks = {
+return {
        name = "texturepacks",
        caption = fgettext("Texturepacks"),
        cbf_formspec = get_formspec,
        cbf_button_handler = main_button_handler,
        on_change = nil
-       }
+}