3d33abf1cd
* Yet another improvements instead of a complete redo Co-authored-by: luk3yx <luk3yx@users.noreply.github.com>
105 lines
3.2 KiB
Lua
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
|