diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index 478a78a..de8ae4d 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -54,29 +54,42 @@ end -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- +local function wordwrap_quickhack(str) + local res = "" + local ar = str:split("\n") + for i = 1, #ar do + local text = ar[i] + -- Hack to add word wrapping. + -- TODO: Add engine support for wrapping in formspecs + while #text > 80 do + if res ~= "" then + res = res .. "," + end + res = res .. core.formspec_escape(string.sub(text, 1, 79)) + text = string.sub(text, 80, #text) + end + if res ~= "" then + res = res .. "," + end + res = res .. core.formspec_escape(text) + end + return res +end + -------------------------------------------------------------------------------- function ui.update() local formspec = "" -- handle errors - if gamedata ~= nil and gamedata.errormessage ~= nil then - local ar = gamedata.errormessage:split("\n") - for i = 1, #ar do - local text = ar[i] - -- Hack to add word wrapping. - -- TODO: Add engine support for wrapping in formspecs - while #text > 80 do - if formspec ~= "" then - formspec = formspec .. "," - end - formspec = formspec .. core.formspec_escape(string.sub(text, 1, 79)) - text = string.sub(text, 80, #text) - end - if formspec ~= "" then - formspec = formspec .. "," - end - formspec = formspec .. core.formspec_escape(text) - end + if gamedata ~= nil and gamedata.reconnect_requested then + formspec = wordwrap_quickhack(gamedata.errormessage or "") + formspec = "size[12,5]" .. + "label[0.5,0;" .. fgettext("The server has requested a reconnect:") .. + "]textlist[0.2,0.8;11.5,3.5;;" .. formspec .. + "]button[6,4.6;3,0.5;btn_reconnect_no;" .. fgettext("Main menu") .. "]" .. + "button[3,4.6;3,0.5;btn_reconnect_yes;" .. fgettext("Reconnect") .. "]" + elseif gamedata ~= nil and gamedata.errormessage ~= nil then + formspec = wordwrap_quickhack(gamedata.errormessage) local error_title if string.find(gamedata.errormessage, "ModError") then error_title = fgettext("An error occured in a Lua script, such as a mod:") @@ -128,13 +141,6 @@ end -------------------------------------------------------------------------------- function ui.handle_buttons(fields) - - if fields["btn_error_confirm"] then - gamedata.errormessage = nil - update_menu() - return - end - for key,value in pairs(ui.childlist) do local retval = value:handle_buttons(fields) @@ -168,8 +174,15 @@ end -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- core.button_handler = function(fields) - if fields["btn_error_confirm"] then + if fields["btn_reconnect_yes"] then + gamedata.reconnect_requested = false gamedata.errormessage = nil + gamedata.do_reconnect = true + core.start() + return + elseif fields["btn_reconnect_no"] or fields["btn_error_confirm"] then + gamedata.errormessage = nil + gamedata.reconnect_requested = false ui.update() return end