Browse Source

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

rubenwardy 3 years ago
parent
commit
850af80089

+ 56 - 39
builtin/mainmenu/dlg_config_world.lua

@@ -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 =
@@ -85,11 +127,14 @@ local function get_formspec(data)
 			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
@@ -198,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()
 
@@ -247,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

+ 11 - 0
builtin/mainmenu/dlg_contentstore.lua

@@ -513,6 +513,17 @@ function create_store_dlg(type)
 
 	search_string = ""
 	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)
 
 	return dialog_create("store",

+ 12 - 0
builtin/mainmenu/tab_local.lua

@@ -35,6 +35,15 @@ if enable_gamebar then
 		end
 
 		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 j=1,#pkgmgr.games,1 do
 					if ("game_btnbar_" .. pkgmgr.games[j].id == key) then
@@ -87,6 +96,9 @@ if enable_gamebar then
 			end
 			btnbar:add_button(btn_name, text, image, tooltip)
 		end
+
+		local plus_image = core.formspec_escape(defaulttexturedir .. "plus.png")
+		btnbar:add_button("game_open_cdb", "", plus_image, fgettext("Install games from ContentDB"))
 	end
 else
 	function current_game()

BIN
textures/base/pack/plus.png