]> git.lizzy.rs Git - minetest.git/blobdiff - builtin/mainmenu/dlg_config_world.lua
Replace 'minetest.' with 'core.' in builtin
[minetest.git] / builtin / mainmenu / dlg_config_world.lua
index 140eb60d9281ac65e0a5922bb4055376cbbafa6a..9bdf92a74fec2977e94067949d158816a6e4b459 100644 (file)
@@ -23,7 +23,49 @@ local function modname_valid(name)
        return not name:find("[^a-z0-9_]")
 end
 
+local function init_data(data)
+       data.list = filterlist.create(
+               pkgmgr.preparemodlist,
+               pkgmgr.comparemod,
+               function(element, uid)
+                       if element.name == uid then
+                               return true
+                       end
+               end,
+               function(element, criteria)
+                       if criteria.hide_game and
+                                       element.is_game_content then
+                               return false
+                       end
+
+                       if criteria.hide_modpackcontents and
+                                       element.modpack ~= nil then
+                               return false
+                       end
+                       return true
+               end,
+               {
+                       worldpath = data.worldspec.path,
+                       gameid = data.worldspec.gameid
+               })
+
+       if data.selected_mod > data.list:size() then
+               data.selected_mod = 0
+       end
+
+       data.list:set_filtercriteria({
+               hide_game = data.hide_gamemods,
+               hide_modpackcontents = data.hide_modpackcontents
+       })
+       data.list:add_sort_mechanism("alphabetic", sort_mod_list)
+       data.list:set_sortmode("alphabetic")
+end
+
 local function get_formspec(data)
+       if not data.list then
+               init_data(data)
+       end
+
        local mod = data.list:get_list()[data.selected_mod] or {name = ""}
 
        local retval =
@@ -31,44 +73,80 @@ local function get_formspec(data)
                "label[0.5,0;" .. fgettext("World:") .. "]" ..
                "label[1.75,0;" .. data.worldspec.name .. "]"
 
-       local hard_deps, soft_deps = pkgmgr.get_dependencies(mod.path)
-
-       if mod.is_modpack then
-               local info = minetest.formspec_escape(
+       if mod.is_modpack or mod.type == "game" then
+               local info = core.formspec_escape(
                        core.get_content_info(mod.path).description)
                if info == "" then
-                       info = fgettext("No modpack description provided.")
+                       if mod.is_modpack then
+                               info = fgettext("No modpack description provided.")
+                       else
+                               info = fgettext("No game description provided.")
+                       end
                end
                retval = retval ..
                        "textarea[0.25,0.7;5.75,7.2;;" .. info .. ";]"
        else
+               local hard_deps, soft_deps = pkgmgr.get_dependencies(mod.path)
+               local hard_deps_str = table.concat(hard_deps, ",")
+               local soft_deps_str = table.concat(soft_deps, ",")
+
                retval = retval ..
                        "label[0,0.7;" .. fgettext("Mod:") .. "]" ..
-                       "label[0.75,0.7;" .. mod.name .. "]" ..
-                       "label[0,1.25;" .. fgettext("Dependencies:") .. "]" ..
-                       "textlist[0,1.75;5,2.125;world_config_depends;" .. hard_deps ..
-                       ";0]" ..
-                       "label[0,3.875;" .. fgettext("Optional dependencies:") .. "]" ..
-                       "textlist[0,4.375;5,1.8;world_config_optdepends;" ..
-                       soft_deps .. ";0]"
+                       "label[0.75,0.7;" .. mod.name .. "]"
+
+               if hard_deps_str == "" then
+                       if soft_deps_str == "" then
+                               retval = retval ..
+                                       "label[0,1.25;" ..
+                                       fgettext("No (optional) dependencies") .. "]"
+                       else
+                               retval = retval ..
+                                       "label[0,1.25;" .. fgettext("No hard dependencies") ..
+                                       "]" ..
+                                       "label[0,1.75;" .. fgettext("Optional dependencies:") ..
+                                       "]" ..
+                                       "textlist[0,2.25;5,4;world_config_optdepends;" ..
+                                       soft_deps_str .. ";0]"
+                       end
+               else
+                       if soft_deps_str == "" then
+                               retval = retval ..
+                                       "label[0,1.25;" .. fgettext("Dependencies:") .. "]" ..
+                                       "textlist[0,1.75;5,4;world_config_depends;" ..
+                                       hard_deps_str .. ";0]" ..
+                                       "label[0,6;" .. fgettext("No optional dependencies") .. "]"
+                       else
+                               retval = retval ..
+                                       "label[0,1.25;" .. fgettext("Dependencies:") .. "]" ..
+                                       "textlist[0,1.75;5,2.125;world_config_depends;" ..
+                                       hard_deps_str .. ";0]" ..
+                                       "label[0,3.9;" .. fgettext("Optional dependencies:") ..
+                                       "]" ..
+                                       "textlist[0,4.375;5,1.8;world_config_optdepends;" ..
+                                       soft_deps_str .. ";0]"
+                       end
+               end
        end
+
        retval = retval ..
                "button[3.25,7;2.5,0.5;btn_config_world_save;" ..
                fgettext("Save") .. "]" ..
                "button[5.75,7;2.5,0.5;btn_config_world_cancel;" ..
-               fgettext("Cancel") .. "]"
+               fgettext("Cancel") .. "]" ..
+               "button[9,7;2.5,0.5;btn_config_world_cdb;" ..
+               fgettext("Find More Mods") .. "]"
 
        if mod.name ~= "" and not mod.is_game_content then
                if mod.is_modpack then
 
                        if pkgmgr.is_modpack_entirely_enabled(data, mod.name) then
                                retval = retval ..
-                                       "button[5.5,0.125;2.5,0.5;btn_mp_disable;" ..
-                                       fgettext("Disable MP") .. "]"
+                                       "button[5.5,0.125;3,0.5;btn_mp_disable;" ..
+                                       fgettext("Disable modpack") .. "]"
                        else
                                retval = retval ..
-                                       "button[5.5,0.125;2.5,0.5;btn_mp_enable;" ..
-                                       fgettext("Enable MP") .. "]"
+                                       "button[5.5,0.125;3,0.5;btn_mp_enable;" ..
+                                       fgettext("Enable modpack") .. "]"
                        end
                else
                        retval = retval ..
@@ -78,11 +156,11 @@ local function get_formspec(data)
        end
        if enabled_all then
                retval = retval ..
-                       "button[8.75,0.125;2.5,0.5;btn_disable_all_mods;" ..
+                       "button[8.95,0.125;2.5,0.5;btn_disable_all_mods;" ..
                        fgettext("Disable all") .. "]"
        else
                retval = retval ..
-                       "button[8.75,0.125;2.5,0.5;btn_enable_all_mods;" ..
+                       "button[8.95,0.125;2.5,0.5;btn_enable_all_mods;" ..
                        fgettext("Enable all") .. "]"
        end
        return retval ..
@@ -134,11 +212,11 @@ local function handle_buttons(this, fields)
                                        not mod.is_game_content then
                                if modname_valid(mod.name) then
                                        worldfile:set("load_mod_" .. mod.name,
-                                                       tostring(mod.enabled))
+                                               mod.enabled and "true" or "false")
                                elseif mod.enabled then
                                        gamedata.errormessage = fgettext_ne("Failed to enable mo" ..
                                                        "d \"$1\" as it contains disallowed characters. " ..
-                                                       "Only chararacters [a-z0-9_] are allowed.",
+                                                       "Only characters [a-z0-9_] are allowed.",
                                                        mod.name)
                                end
                                mods["load_mod_" .. mod.name] = nil
@@ -165,6 +243,16 @@ local function handle_buttons(this, fields)
                return true
        end
 
+       if fields.btn_config_world_cdb then
+               this.data.list = nil
+
+               local dlg = create_store_dlg("mod")
+               dlg:set_parent(this)
+               this:hide()
+               dlg:show()
+               return true
+       end
+
        if fields.btn_enable_all_mods then
                local list = this.data.list:get_raw_list()
 
@@ -214,43 +302,5 @@ function create_configure_world_dlg(worldidx)
                return
        end
 
-       dlg.data.list = filterlist.create(
-               pkgmgr.preparemodlist,
-               pkgmgr.comparemod,
-               function(element, uid)
-                       if element.name == uid then
-                               return true
-                       end
-               end,
-               function(element, criteria)
-                       if criteria.hide_game and
-                                       element.is_game_content then
-                               return false
-                       end
-
-                       if criteria.hide_modpackcontents and
-                                       element.modpack ~= nil then
-                               return false
-                       end
-                       return true
-               end,
-               {
-                       worldpath = dlg.data.worldspec.path,
-                       gameid = dlg.data.worldspec.gameid
-               }
-       )
-
-
-       if dlg.data.selected_mod > dlg.data.list:size() then
-               dlg.data.selected_mod = 0
-       end
-
-       dlg.data.list:set_filtercriteria({
-               hide_game = dlg.data.hide_gamemods,
-               hide_modpackcontents = dlg.data.hide_modpackcontents
-       })
-       dlg.data.list:add_sort_mechanism("alphabetic", sort_mod_list)
-       dlg.data.list:set_sortmode("alphabetic")
-
        return dlg
 end