From ee4caf945b5e8ace3a14840e032c2e6450ef2c8d Mon Sep 17 00:00:00 2001 From: SwissalpS Date: Mon, 19 Oct 2020 17:19:38 +0200 Subject: [PATCH] add double-click support for textlists That has been bugging me ever since I first tried this mod. --- form.missionblock_stepeditor.lua | 10 ++++++++++ form.newstep.lua | 20 ++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/form.missionblock_stepeditor.lua b/form.missionblock_stepeditor.lua index cc69ad4..350bf2a 100644 --- a/form.missionblock_stepeditor.lua +++ b/form.missionblock_stepeditor.lua @@ -53,6 +53,16 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return end + if fields.steps then + parts = fields.steps:split(":") + local command = parts[1] + local selected_step = tonumber(parts[2]) + if "DCL" == command then -- double clicked + missions.set_selected_list_item(player, selected_step) + fields.edit = true + end + end + if fields.add then missions.form.newstep(pos, node, player) return true diff --git a/form.newstep.lua b/form.newstep.lua index fb7b662..be5157e 100644 --- a/form.newstep.lua +++ b/form.newstep.lua @@ -54,7 +54,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if name ~= FORMNAME then return end - + local pos = minetest.string_to_pos(parts[2]) local node = minetest.get_node(pos) @@ -62,17 +62,22 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return end + local player_name = player:get_player_name() if fields.steptype then parts = fields.steptype:split(":") - if parts[1] == "CHG" then - local selected_step = tonumber(parts[2]) - selected_newstep_index[player:get_player_name()] = selected_step + local command = parts[1] + local selected_step = tonumber(parts[2]) + if "CHG" == command -- changed selection + or "DCL" == command -- double clicked + then + selected_newstep_index[player_name] = selected_step + if "DCL" == command then fields.add = true end end end if fields.add then local steps = get_mission_steps_for_player(player) - local index = selected_newstep_index[player:get_player_name()] + local index = selected_newstep_index[player_name] local spec = steps[index] if not spec then @@ -80,8 +85,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end -- check privs - if spec.privs and not minetest.check_player_privs(player:get_player_name(), spec.privs) then - minetest.chat_send_player(player:get_player_name(), "Missing privs: " .. dump(spec.privs)) + if spec.privs and not minetest.check_player_privs(player_name, spec.privs) then + minetest.chat_send_player(player_name, "Missing privs: " .. dump(spec.privs)) return end @@ -108,4 +113,3 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end) -