Merge 69de96c3e2
into c4d624083d
This commit is contained in:
commit
323816104b
@ -14,6 +14,9 @@ https://www.apache.org/licenses/LICENSE-2.0.html
|
||||
Textures by Zughy are under CC BY-SA 4.0
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
Textures by cx384 are under CC BY-SA 4.0
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
Media files by DS are under CC BY-SA 4.0
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
@ -64,7 +67,13 @@ Zughy:
|
||||
textures/base/pack/settings_info.png
|
||||
textures/base/pack/settings_reset.png
|
||||
textures/base/pack/server_url.png
|
||||
textures/base/pack/server_url_unavailable.png
|
||||
textures/base/pack/server_view_clients.png
|
||||
textures/base/pack/server_view_clients_unavailable.png
|
||||
|
||||
cx384:
|
||||
textures/base/pack/server_view_mods.png
|
||||
textures/base/pack/server_view_mods_unavailable.png
|
||||
|
||||
appgurueu:
|
||||
textures/base/pack/server_incompatible.png
|
||||
|
104
builtin/mainmenu/dlg_server_list_mods.lua
Normal file
104
builtin/mainmenu/dlg_server_list_mods.lua
Normal file
@ -0,0 +1,104 @@
|
||||
-- Luanti
|
||||
-- Copyright (C) 2024 cx384
|
||||
-- SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
local function get_formspec(dialogdata)
|
||||
local TOUCH_GUI = core.settings:get_bool("touch_gui")
|
||||
local server = dialogdata.server
|
||||
local filter_prefix = dialogdata.filter_prefix
|
||||
|
||||
-- A wrongly behaving server may send ill formed mod names
|
||||
local mods = {}
|
||||
table.sort(server.mods)
|
||||
|
||||
if filter_prefix == true then -- All prefixes
|
||||
mods = server.mods
|
||||
elseif filter_prefix then
|
||||
for _, mod in ipairs(server.mods) do
|
||||
if mod == filter_prefix or mod:sub(0, #filter_prefix + 1) == filter_prefix .."_" then
|
||||
table.insert(mods, core.formspec_escape(mod))
|
||||
end
|
||||
end
|
||||
else
|
||||
local last_prefix
|
||||
for i, mod in ipairs(server.mods) do
|
||||
local prefix = mod:match("([^_]*)_") or mod
|
||||
if prefix and last_prefix == prefix then
|
||||
mods[#mods] = "#BBBBBB▶ ".. core.formspec_escape(prefix)
|
||||
else
|
||||
table.insert(mods, core.formspec_escape(mod))
|
||||
last_prefix = prefix
|
||||
end
|
||||
end
|
||||
end
|
||||
dialogdata.mods = mods
|
||||
mods = table.concat(mods, ",")
|
||||
|
||||
local prefix_button_label
|
||||
if not filter_prefix then
|
||||
prefix_button_label = fgettext("Expand all prefixes")
|
||||
elseif filter_prefix == true then
|
||||
prefix_button_label = fgettext("Group by prefix")
|
||||
else
|
||||
prefix_button_label = fgettext("Show all mods")
|
||||
end
|
||||
|
||||
local heading
|
||||
if server.gameid then
|
||||
heading = fgettext("The $1 server uses a game called $2 and the following mods:",
|
||||
"<b>" .. core.hypertext_escape(server.name) .. "</b>",
|
||||
"<style font=mono>" .. core.hypertext_escape(server.gameid) .. "</style>")
|
||||
else
|
||||
heading = fgettext("The $1 server uses the following mods:",
|
||||
"<b>" .. core.hypertext_escape(server.name) .. "</b>")
|
||||
end
|
||||
|
||||
local formspec = {
|
||||
"formspec_version[8]",
|
||||
"size[6,9.5]",
|
||||
TOUCH_GUI and "padding[0.01,0.01]" or "",
|
||||
"hypertext[0,0;6,1.5;;<global margin=5 halign=center valign=middle>".. heading .. "]",
|
||||
"textlist[0.5,1.5;5,6.8;mods;" .. mods .. "]",
|
||||
"button[0.5,8.5;3,0.8;prefix;" .. prefix_button_label .. "]",
|
||||
"button[3.5,8.5;2,0.8;quit;OK]"
|
||||
}
|
||||
return table.concat(formspec, "")
|
||||
end
|
||||
|
||||
local function buttonhandler(this, fields)
|
||||
if fields.quit then
|
||||
this:delete()
|
||||
return true
|
||||
end
|
||||
|
||||
if fields.mods then
|
||||
local exploded = core.explode_textlist_event(fields.mods)
|
||||
if exploded.type == "DCL" then
|
||||
local match = this.data.mods[exploded.index]:match("#BBBBBB▶ ([^_]*)")
|
||||
if match then
|
||||
this.data.filter_prefix = match
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if fields.prefix then
|
||||
if this.data.filter_prefix then
|
||||
this.data.filter_prefix = nil
|
||||
else
|
||||
this.data.filter_prefix = true
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function create_server_list_mods_dialog(server)
|
||||
local retval = dialog_create("dlg_server_list_mods",
|
||||
get_formspec,
|
||||
buttonhandler,
|
||||
nil)
|
||||
retval.data.server = server
|
||||
return retval
|
||||
end
|
@ -56,6 +56,7 @@ dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua")
|
||||
dofile(menupath .. DIR_DELIM .. "dlg_version_info.lua")
|
||||
dofile(menupath .. DIR_DELIM .. "dlg_reinstall_mtg.lua")
|
||||
dofile(menupath .. DIR_DELIM .. "dlg_clients_list.lua")
|
||||
dofile(menupath .. DIR_DELIM .. "dlg_server_list_mods.lua")
|
||||
|
||||
local tabs = {
|
||||
content = dofile(menupath .. DIR_DELIM .. "tab_content.lua"),
|
||||
|
@ -161,6 +161,26 @@ local function get_formspec(tabview, name, tabdata)
|
||||
core.formspec_escape(gamedata.serverdescription) .. "]"
|
||||
end
|
||||
|
||||
-- Mods button
|
||||
local mods = selected_server.mods
|
||||
if mods and #mods > 0 then
|
||||
local tooltip = ""
|
||||
if selected_server.gameid then
|
||||
tooltip = "Game: " .. selected_server.gameid .. "\n"
|
||||
end
|
||||
tooltip = tooltip .. "Number of mods: " .. #mods
|
||||
|
||||
retval = retval ..
|
||||
"tooltip[btn_view_mods;" .. core.formspec_escape(tooltip) .. "]" ..
|
||||
"style[btn_view_mods;padding=6]" ..
|
||||
"image_button[4,1.3;0.5,0.5;" .. core.formspec_escape(defaulttexturedir ..
|
||||
"server_view_mods.png") .. ";btn_view_mods;]"
|
||||
else
|
||||
retval = retval .. "image[4.1,1.4;0.3,0.3;" .. core.formspec_escape(defaulttexturedir ..
|
||||
"server_view_mods_unavailable.png") .. "]"
|
||||
end
|
||||
|
||||
-- Clients list button
|
||||
local clients_list = selected_server.clients_list
|
||||
local can_view_clients_list = clients_list and #clients_list > 0
|
||||
if can_view_clients_list then
|
||||
@ -178,15 +198,23 @@ local function get_formspec(tabview, name, tabdata)
|
||||
retval = retval .. "style[btn_view_clients;padding=6]"
|
||||
retval = retval .. "image_button[4.5,1.3;0.5,0.5;" .. core.formspec_escape(defaulttexturedir ..
|
||||
"server_view_clients.png") .. ";btn_view_clients;]"
|
||||
else
|
||||
retval = retval .. "image[4.6,1.4;0.3,0.3;" .. core.formspec_escape(defaulttexturedir ..
|
||||
"server_view_clients_unavailable.png") .. "]"
|
||||
end
|
||||
|
||||
-- URL button
|
||||
if selected_server.url then
|
||||
retval = retval .. "tooltip[btn_server_url;" .. fgettext("Open server website") .. "]"
|
||||
retval = retval .. "style[btn_server_url;padding=6]"
|
||||
retval = retval .. "image_button[" .. (can_view_clients_list and "4" or "4.5") .. ",1.3;0.5,0.5;" ..
|
||||
retval = retval .. "image_button[3.5,1.3;0.5,0.5;" ..
|
||||
core.formspec_escape(defaulttexturedir .. "server_url.png") .. ";btn_server_url;]"
|
||||
else
|
||||
retval = retval .. "image[3.6,1.4;0.3,0.3;" .. core.formspec_escape(defaulttexturedir ..
|
||||
"server_url_unavailable.png") .. "]"
|
||||
end
|
||||
|
||||
-- Favorites toggle button
|
||||
if is_selected_fav() then
|
||||
retval = retval .. "tooltip[btn_delete_favorite;" .. fgettext("Remove favorite") .. "]"
|
||||
retval = retval .. "style[btn_delete_favorite;padding=6]"
|
||||
@ -468,6 +496,14 @@ local function main_button_handler(tabview, fields, name, tabdata)
|
||||
return true
|
||||
end
|
||||
|
||||
if fields.btn_view_mods then
|
||||
local dlg = create_server_list_mods_dialog(find_selected_server())
|
||||
dlg:set_parent(tabview)
|
||||
tabview:hide()
|
||||
dlg:show()
|
||||
return true
|
||||
end
|
||||
|
||||
if fields.btn_mp_clear then
|
||||
tabdata.search_for = ""
|
||||
menudata.search_result = nil
|
||||
|
BIN
textures/base/pack/server_url_unavailable.png
Normal file
BIN
textures/base/pack/server_url_unavailable.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 297 B |
Binary file not shown.
Before Width: | Height: | Size: 218 B After Width: | Height: | Size: 146 B |
BIN
textures/base/pack/server_view_clients_unavailable.png
Normal file
BIN
textures/base/pack/server_view_clients_unavailable.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 145 B |
BIN
textures/base/pack/server_view_mods.png
Normal file
BIN
textures/base/pack/server_view_mods.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 210 B |
BIN
textures/base/pack/server_view_mods_unavailable.png
Normal file
BIN
textures/base/pack/server_view_mods_unavailable.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 198 B |
Loading…
Reference in New Issue
Block a user