diff options
Diffstat (limited to 'builtin/fstk')
-rw-r--r-- | builtin/fstk/ui.lua | 71 |
1 files changed, 53 insertions, 18 deletions
diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index 708ea19cf..de8ae4d2c 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -23,7 +23,7 @@ ui.default = nil function ui.add(child) --TODO check child ui.childlist[child.name] = child - + return child.name end @@ -33,7 +33,7 @@ function ui.delete(child) if ui.childlist[child.name] == nil then return false end - + ui.childlist[child.name] = nil return true end @@ -54,17 +54,52 @@ 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 - formspec = "size[12,3.2]" .. - "textarea[1,1;10,2;;ERROR: " .. - core.formspec_escape(gamedata.errormessage) .. - ";]".. - "button[4.5,2.5;3,0.5;btn_error_confirm;" .. fgettext("Ok") .. "]" + 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:") + else + error_title = fgettext("An error occured:") + end + formspec = "size[12,5]" .. + "label[0.5,0;" .. error_title .. + "]textlist[0.2,0.8;11.5,3.5;;" .. formspec .. + "]button[4.5,4.6;3,0.5;btn_error_confirm;" .. fgettext("Ok") .. "]" else local active_toplevel_ui_elements = 0 for key,value in pairs(ui.childlist) do @@ -77,7 +112,7 @@ function ui.update() end end end - + -- no need to show addons if there ain't a toplevel element if (active_toplevel_ui_elements > 0) then for key,value in pairs(ui.childlist) do @@ -106,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) @@ -127,7 +155,7 @@ end -------------------------------------------------------------------------------- function ui.handle_events(event) - + for key,value in pairs(ui.childlist) do if value.handle_events ~= nil then @@ -146,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 |