Add buttons to ContentDB in game bar and configure world (#9944)

This commit is contained in:
rubenwardy 2020-06-04 21:53:26 +01:00 committed by GitHub
parent c1e01bc638
commit 850af80089
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 79 additions and 39 deletions

@ -23,7 +23,49 @@ local function modname_valid(name)
return not name:find("[^a-z0-9_]") return not name:find("[^a-z0-9_]")
end 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) 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 mod = data.list:get_list()[data.selected_mod] or {name = ""}
local retval = local retval =
@ -85,11 +127,14 @@ local function get_formspec(data)
end end
end end
end end
retval = retval .. retval = retval ..
"button[3.25,7;2.5,0.5;btn_config_world_save;" .. "button[3.25,7;2.5,0.5;btn_config_world_save;" ..
fgettext("Save") .. "]" .. fgettext("Save") .. "]" ..
"button[5.75,7;2.5,0.5;btn_config_world_cancel;" .. "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.name ~= "" and not mod.is_game_content then
if mod.is_modpack then if mod.is_modpack then
@ -198,6 +243,16 @@ local function handle_buttons(this, fields)
return true return true
end 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 if fields.btn_enable_all_mods then
local list = this.data.list:get_raw_list() local list = this.data.list:get_raw_list()
@ -247,43 +302,5 @@ function create_configure_world_dlg(worldidx)
return return
end 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 return dlg
end end

@ -513,6 +513,17 @@ function create_store_dlg(type)
search_string = "" search_string = ""
cur_page = 1 cur_page = 1
if type then
-- table.indexof does not work on tables that contain `nil`
for i, v in pairs(filter_types_type) do
if v == type then
filter_type = i
break
end
end
end
store.filter_packages(search_string) store.filter_packages(search_string)
return dialog_create("store", return dialog_create("store",

@ -35,6 +35,15 @@ if enable_gamebar then
end end
local function game_buttonbar_button_handler(fields) local function game_buttonbar_button_handler(fields)
if fields.game_open_cdb then
local maintab = ui.find_by_name("maintab")
local dlg = create_store_dlg("game")
dlg:set_parent(maintab)
maintab:hide()
dlg:show()
return true
end
for key,value in pairs(fields) do for key,value in pairs(fields) do
for j=1,#pkgmgr.games,1 do for j=1,#pkgmgr.games,1 do
if ("game_btnbar_" .. pkgmgr.games[j].id == key) then if ("game_btnbar_" .. pkgmgr.games[j].id == key) then
@ -87,6 +96,9 @@ if enable_gamebar then
end end
btnbar:add_button(btn_name, text, image, tooltip) btnbar:add_button(btn_name, text, image, tooltip)
end end
local plus_image = core.formspec_escape(defaulttexturedir .. "plus.png")
btnbar:add_button("game_open_cdb", "", plus_image, fgettext("Install games from ContentDB"))
end end
else else
function current_game() function current_game()

BIN
textures/base/pack/plus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 763 B