]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - builtin/mainmenu/tab_online.lua
Add register dialog to separate login/register (#12185)
[dragonfireclient.git] / builtin / mainmenu / tab_online.lua
index fb7409864fa526b839353fce2d5bf5dd2851f45c..a8e1eb2ef422ff39ec36c22373c2954267d19914 100644 (file)
@@ -87,27 +87,34 @@ local function get_formspec(tabview, name, tabdata)
                "field[4.25,0.5;1.25,0.75;te_port;;" ..
                        core.formspec_escape(core.settings:get("remote_port")) .. "]" ..
 
-               -- Name / Password
-               "label[0.25,1.55;" .. fgettext("Name") .. "]" ..
-               "label[3,1.55;" .. fgettext("Password") .. "]" ..
-               "field[0.25,1.75;2.75,0.75;te_name;;" ..
-                       core.formspec_escape(core.settings:get("name")) .. "]" ..
-               "pwdfield[3,1.75;2.5,0.75;te_pwd;]" ..
-
                -- Description Background
-               "label[0.25,2.75;" .. fgettext("Server Description") .. "]" ..
-               "box[0.25,3;5.25,2.75;#999999]"..
+               "label[0.25,1.6;" .. fgettext("Server Description") .. "]" ..
+               "box[0.25,1.85;5.25,2.7;#999999]"..
+
+               -- Name / Password
+               "container[0,4.8]" ..
+               "label[0.25,0;" .. fgettext("Name") .. "]" ..
+               "label[3,0;" .. fgettext("Password") .. "]" ..
+               "field[0.25,0.2;2.625,0.75;te_name;;" .. core.formspec_escape(core.settings:get("name")) .. "]" ..
+               "pwdfield[2.875,0.2;2.625,0.75;te_pwd;]" ..
+               "container_end[]" ..
 
                -- Connect
-               "button[3,6;2.5,0.75;btn_mp_connect;" .. fgettext("Connect") .. "]"
+               "button[3,6;2.5,0.75;btn_mp_login;" .. fgettext("Login") .. "]"
+
+       if core.settings:get_bool("enable_split_login_register") then
+               retval = retval .. "button[0.25,6;2.5,0.75;btn_mp_register;" .. fgettext("Register") .. "]"
+       end
 
        if tabdata.selected then
                if gamedata.fav then
-                       retval = retval .. "button[0.25,6;2.5,0.75;btn_delete_favorite;" ..
-                               fgettext("Del. Favorite") .. "]"
+                       retval = retval .. "tooltip[btn_delete_favorite;" .. fgettext("Remove favorite") .. "]"
+                       retval = retval .. "style[btn_delete_favorite;padding=6]"
+                       retval = retval .. "image_button[5,1.3;0.5,0.5;" .. defaulttexturedir ..
+                               "server_favorite_delete.png;btn_delete_favorite;]"
                end
                if gamedata.serverdescription then
-                       retval = retval .. "textarea[0.25,3;5.25,2.75;;;" ..
+                       retval = retval .. "textarea[0.25,1.85;5.2,2.75;;;" ..
                                core.formspec_escape(gamedata.serverdescription) .. "]"
                end
        end
@@ -339,12 +346,15 @@ local function main_button_handler(tabview, fields, name, tabdata)
                return true
        end
 
-       if (fields.btn_mp_connect or fields.key_enter)
+       if (fields.btn_mp_login or fields.key_enter)
                        and fields.te_address ~= "" and fields.te_port then
                gamedata.playername = fields.te_name
                gamedata.password   = fields.te_pwd
                gamedata.address    = fields.te_address
                gamedata.port       = tonumber(fields.te_port)
+
+               local enable_split_login_register = core.settings:get_bool("enable_split_login_register")
+               gamedata.allow_login_or_register = enable_split_login_register and "login" or "any"
                gamedata.selected_world = 0
 
                local idx = core.get_table_index("servers")
@@ -381,6 +391,25 @@ local function main_button_handler(tabview, fields, name, tabdata)
                return true
        end
 
+       if fields.btn_mp_register and fields.te_address ~= "" and fields.te_port then
+               local idx = core.get_table_index("servers")
+               local server = idx and tabdata.lookup[idx]
+               if server and (server.address ~= fields.te_address or server.port ~= tonumber(fields.te_port)) then
+                       server = nil
+               end
+
+               if server and not is_server_protocol_compat_or_error(
+                                       server.proto_min, server.proto_max) then
+                       return true
+               end
+
+               local dlg = create_register_dialog(fields.te_address, tonumber(fields.te_port), server)
+               dlg:set_parent(tabview)
+               tabview:hide()
+               dlg:show()
+               return true
+       end
+
        return false
 end