1
0
Maksym H 3d33abf1cd Yet another MainMenu improvements PR (#101)
* Yet another improvements instead of a complete redo

Co-authored-by: luk3yx <luk3yx@users.noreply.github.com>
2022-11-14 00:46:46 +01:00

105 lines
3.2 KiB
Lua

--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 3.0 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function delete_world_formspec(dialogdata)
local game_name = dialogdata.delete_game
local delete_name = dialogdata.delete_name
if game_name then
delete_name = delete_name .. " (" .. game_name .. ")"
end
local formspec = {
"real_coordinates[true]",
"image[6.5,0.8;2.5,2.5;", defaulttexturedir_esc, "attention.png]",
"style[msg,wait;content_offset=0]",
"image_button[1,3.5;13.5,0.8;;msg;",
fgettext("Delete World \"$1\"?", delete_name), ";false;false]",
btn_style("world_delete_cancel"),
"image_button[7.9,5.3;3.5,0.8;;world_delete_cancel;",
fgettext("Cancel"), ";true;false]",
}
if dialogdata.cooldown > 0 then
formspec[#formspec + 1] = btn_style("wait", "gray")
formspec[#formspec + 1] = "image_button[4.1,5.3;3.5,0.8;;wait;" ..
fgettext("Delete") .. " (" .. dialogdata.cooldown .. ");true;false]"
else
formspec[#formspec + 1] = btn_style("world_delete_confirm", "red")
formspec[#formspec + 1] = "image_button[4.1,5.3;3.5,0.8;;world_delete_confirm;" ..
fgettext("Delete") .. ";true;false]"
end
return table.concat(formspec)
end
local function delete_world_buttonhandler(this, fields)
if fields["world_delete_confirm"] then
if this.data.delete_index > 0 and
this.data.delete_index <= #menudata.worldlist:get_raw_list() then
core.delete_world(this.data.delete_index)
menudata.worldlist:refresh()
end
this:delete()
return true
end
if fields["world_delete_cancel"] then
this:delete()
return true
end
return false
end
-- core.handle_async requires a function defined in Lua
local function sleep_ms(delay)
return core.sleep_ms(delay)
end
local function start_timer(msgbox)
core.handle_async(sleep_ms, 1000, function()
-- If this.hidden isn't true then the dialog must have been closed and
-- the countdown can be stopped.
if msgbox.parent and msgbox.parent.hidden then
msgbox.data.cooldown = msgbox.data.cooldown - 1
ui.update()
start_timer(msgbox)
end
end)
end
function create_delete_world_dlg(name_to_del, index_to_del, game_to_del)
assert(name_to_del ~= nil and type(name_to_del) == "string" and name_to_del ~= "")
assert(index_to_del ~= nil and type(index_to_del) == "number")
local retval = dialog_create("delete_world",
delete_world_formspec,
delete_world_buttonhandler,
nil, true)
retval.data.delete_name = name_to_del
retval.data.delete_game = game_to_del
retval.data.delete_index = index_to_del
retval.data.cooldown = 5
start_timer(retval)
return retval
end