\r
-- display node (or unknown_node image otherwise) at specified pos in formspec\r
local formspec_node = function(pos, nodename)\r
- if nodename then\r
- local ndef = minetest.registered_nodes[nodename] or {}\r
+ local ndef = nodename and minetest.registered_nodes[nodename]\r
+ if nodename and ndef then\r
return string.format("item_image[%s;1,1;%s]", pos, nodename) ..\r
string.format("tooltip[%s;1,1;%s]", pos, minetest.formspec_escape(ndef.description))\r
else\r
\r
-- two further priv helpers\r
local function we_privs(command)\r
- return minetest.chatcommands["/" .. command].privs\r
+ return worldedit.registered_commands[command].privs\r
end\r
\r
local function combine_we_privs(list)\r
return combine_privs(unpack(args))\r
end\r
\r
+-- functions that handle value changing & page reshowing (without submitting)\r
+local function copy_changes(name, fields, def)\r
+ for field, into in pairs(def) do\r
+ if into ~= true and fields[field] then\r
+ local value = tostring(fields[field])\r
+ if into == gui_axis1 or into == gui_axis2 then\r
+ into[name] = axis_indices[value]\r
+ elseif into == gui_angle then\r
+ into[name] = angle_indices[value]\r
+ else\r
+ into[name] = value\r
+ end\r
+ end\r
+ end\r
+end\r
+\r
+local function handle_changes(name, identifier, fields, def)\r
+ local any = false\r
+ for field, into in pairs(def) do\r
+ if fields.key_enter_field == field then\r
+ any = true\r
+ end\r
+ -- first condition: buttons (value not saved)\r
+ -- others: dropdowns which will be sent when their value changes\r
+ if into == true or into == gui_axis1 or into == gui_axis2 or into == gui_angle then\r
+ if fields[field] then\r
+ any = true\r
+ end\r
+ end\r
+ end\r
+ if not any then\r
+ return false\r
+ end\r
+\r
+ any = false\r
+ for field, into in pairs(def) do\r
+ if into ~= true and fields[field] then\r
+ local value = tostring(fields[field])\r
+ if into == gui_axis1 or into == gui_axis2 then\r
+ into[name] = axis_indices[value]\r
+ elseif into == gui_angle then\r
+ into[name] = angle_indices[value]\r
+ else\r
+ into[name] = value\r
+ end\r
+\r
+ if into == gui_nodename1 or into == gui_nodename2 then\r
+ any = true\r
+ end\r
+ end\r
+ end\r
+ -- Only nodename fields change based on the value, so only re-show the page if necessary\r
+ if any then\r
+ worldedit.show_page(name, identifier)\r
+ end\r
+ return true\r
+end\r
+\r
worldedit.register_gui_function("worldedit_gui_about", {\r
name = "About",\r
privs = {interact=true},\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_set", function(name, fields)\r
- local ret = false\r
- if fields.worldedit_gui_set_search or fields.key_enter_field == "worldedit_gui_set_node" then\r
- gui_nodename1[name] = tostring(fields.worldedit_gui_set_node)\r
- worldedit.show_page(name, "worldedit_gui_set")\r
- ret = true -- fallthrough\r
- end\r
+ local cg = {\r
+ worldedit_gui_set_search = true,\r
+ worldedit_gui_set_node = gui_nodename1,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_set", fields, cg)\r
if fields.worldedit_gui_set_submit then\r
+ copy_changes(name, fields, cg)\r
+ worldedit.show_page(name, "worldedit_gui_set")\r
+\r
local n = worldedit.normalize_nodename(gui_nodename1[name])\r
if n then\r
minetest.chatcommands["/set"].func(name, n)\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_replace", function(name, fields)\r
- local ret = false\r
- if fields.worldedit_gui_replace_search_search or fields.worldedit_gui_replace_replace_search\r
- or table.indexof({"worldedit_gui_replace_search", "worldedit_gui_replace_replace"}, fields.key_enter_field) ~= -1 then\r
- gui_nodename1[name] = tostring(fields.worldedit_gui_replace_search)\r
- gui_nodename2[name] = tostring(fields.worldedit_gui_replace_replace)\r
+ local cg = {\r
+ worldedit_gui_replace_search_search = true,\r
+ worldedit_gui_replace_replace_search = true,\r
+ worldedit_gui_replace_search = gui_nodename1,\r
+ worldedit_gui_replace_replace = gui_nodename2,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_replace", fields, cg)\r
+ if fields.worldedit_gui_replace_submit or fields.worldedit_gui_replace_submit_inverse then\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_replace")\r
\r
- ret = true -- fallthrough\r
- end\r
- if fields.worldedit_gui_replace_submit or fields.worldedit_gui_replace_submit_inverse then\r
local submit = "replace"\r
if fields.worldedit_gui_replace_submit_inverse then\r
submit = "replaceinverse"\r
local nodename = worldedit.normalize_nodename(node)\r
return "size[6.5,5]" .. worldedit.get_formspec_header("worldedit_gui_sphere_dome") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_sphere_dome_node;Name;%s]", minetest.formspec_escape(node)) ..\r
+ "field_close_on_enter[worldedit_gui_sphere_dome_node;false]" ..\r
"button[4,1.18;1.5,0.8;worldedit_gui_sphere_dome_search;Search]" ..\r
formspec_node("5.5,1.1", nodename) ..\r
string.format("field[0.5,2.5;4,0.8;worldedit_gui_sphere_dome_radius;Radius;%s]", minetest.formspec_escape(radius)) ..\r
+ "field_close_on_enter[worldedit_gui_sphere_dome_radius;false]" ..\r
"button_exit[0,3.5;3,0.8;worldedit_gui_sphere_dome_submit_hollow;Hollow Sphere]" ..\r
"button_exit[3.5,3.5;3,0.8;worldedit_gui_sphere_dome_submit_solid;Solid Sphere]" ..\r
"button_exit[0,4.5;3,0.8;worldedit_gui_sphere_dome_submit_hollow_dome;Hollow Dome]" ..\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_sphere_dome", function(name, fields)\r
- if fields.worldedit_gui_sphere_dome_search\r
- or fields.worldedit_gui_sphere_dome_submit_hollow or fields.worldedit_gui_sphere_dome_submit_solid\r
+ local cg = {\r
+ worldedit_gui_sphere_dome_search = true,\r
+ worldedit_gui_sphere_dome_node = gui_nodename1,\r
+ worldedit_gui_sphere_dome_radius = gui_distance2,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_sphere_dome", fields, cg)\r
+ if fields.worldedit_gui_sphere_dome_submit_hollow or fields.worldedit_gui_sphere_dome_submit_solid\r
or fields.worldedit_gui_sphere_dome_submit_hollow_dome or fields.worldedit_gui_sphere_dome_submit_solid_dome then\r
- gui_nodename1[name] = tostring(fields.worldedit_gui_sphere_dome_node)\r
- gui_distance2[name] = tostring(fields.worldedit_gui_sphere_dome_radius)\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_sphere_dome")\r
\r
- local submit = nil\r
- if fields.worldedit_gui_sphere_dome_submit_hollow then\r
- submit = "hollowsphere"\r
- elseif fields.worldedit_gui_sphere_dome_submit_solid then\r
+ local submit = "hollowsphere"\r
+ if fields.worldedit_gui_sphere_dome_submit_solid then\r
submit = "sphere"\r
elseif fields.worldedit_gui_sphere_dome_submit_hollow_dome then\r
submit = "hollowdome"\r
elseif fields.worldedit_gui_sphere_dome_submit_solid_dome then\r
submit = "dome"\r
end\r
- if submit then\r
- local n = worldedit.normalize_nodename(gui_nodename1[name])\r
- if n then\r
- minetest.chatcommands["/"..submit].func(name, string.format("%s %s", gui_distance2[name], n))\r
- end\r
+ local n = worldedit.normalize_nodename(gui_nodename1[name])\r
+ if n then\r
+ minetest.chatcommands["/"..submit].func(name, string.format("%s %s", gui_distance2[name], n))\r
end\r
return true\r
end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_cylinder", {\r
local nodename = worldedit.normalize_nodename(node)\r
return "size[6.5,6]" .. worldedit.get_formspec_header("worldedit_gui_cylinder") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_cylinder_node;Name;%s]", minetest.formspec_escape(node)) ..\r
+ "field_close_on_enter[worldedit_gui_cylinder_node;false]" ..\r
"button[4,1.18;1.5,0.8;worldedit_gui_cylinder_search;Search]" ..\r
formspec_node("5.5,1.1", nodename) ..\r
string.format("field[0.5,2.5;4,0.8;worldedit_gui_cylinder_length;Length;%s]", minetest.formspec_escape(length)) ..\r
string.format("dropdown[4,2.18;2.5;worldedit_gui_cylinder_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
string.format("field[0.5,3.5;2,0.8;worldedit_gui_cylinder_radius1;Base Radius;%s]", minetest.formspec_escape(radius1)) ..\r
string.format("field[2.5,3.5;2,0.8;worldedit_gui_cylinder_radius2;Top Radius;%s]", minetest.formspec_escape(radius2)) ..\r
+ "field_close_on_enter[worldedit_gui_cylinder_length;false]" ..\r
+ "field_close_on_enter[worldedit_gui_cylinder_radius1;false]" ..\r
+ "field_close_on_enter[worldedit_gui_cylinder_radius2;false]" ..\r
"label[0.25,4;Equal base and top radius creates a cylinder,\n"..\r
"zero top radius creates a cone.\nConsult documentation for more information.]"..\r
"button_exit[0,5.5;3,0.8;worldedit_gui_cylinder_submit_hollow;Hollow Cylinder]" ..\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_cylinder", function(name, fields)\r
- if fields.worldedit_gui_cylinder_search\r
- or fields.worldedit_gui_cylinder_submit_hollow or fields.worldedit_gui_cylinder_submit_solid then\r
- gui_nodename1[name] = tostring(fields.worldedit_gui_cylinder_node)\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_cylinder_axis]\r
- gui_distance1[name] = tostring(fields.worldedit_gui_cylinder_length)\r
- gui_distance2[name] = tostring(fields.worldedit_gui_cylinder_radius1)\r
- gui_distance3[name] = tostring(fields.worldedit_gui_cylinder_radius2)\r
+ local cg = {\r
+ worldedit_gui_cylinder_search = true,\r
+ worldedit_gui_cylinder_node = gui_nodename1,\r
+ worldedit_gui_cylinder_axis = gui_axis1,\r
+ worldedit_gui_cylinder_length = gui_distance1,\r
+ worldedit_gui_cylinder_radius1 = gui_distance2,\r
+ worldedit_gui_cylinder_radius2 = gui_distance3,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_cylinder", fields, cg)\r
+ if fields.worldedit_gui_cylinder_submit_hollow or fields.worldedit_gui_cylinder_submit_solid then\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_cylinder")\r
\r
- local submit = nil\r
- if fields.worldedit_gui_cylinder_submit_hollow then\r
- submit = "hollowcylinder"\r
- elseif fields.worldedit_gui_cylinder_submit_solid then\r
+ local submit = "hollowcylinder"\r
+ if fields.worldedit_gui_cylinder_submit_solid then\r
submit = "cylinder"\r
end\r
- if submit then\r
- local n = worldedit.normalize_nodename(gui_nodename1[name])\r
- if n then\r
- local args = string.format("%s %s %s %s %s", axis_values[gui_axis1[name]], gui_distance1[name], gui_distance2[name], gui_distance3[name], n)\r
- minetest.chatcommands["/"..submit].func(name, args)\r
- end\r
+ local n = worldedit.normalize_nodename(gui_nodename1[name])\r
+ if n then\r
+ local args = string.format("%s %s %s %s %s", axis_values[gui_axis1[name]], gui_distance1[name], gui_distance2[name], gui_distance3[name], n)\r
+ minetest.chatcommands["/"..submit].func(name, args)\r
end\r
return true\r
end\r
- if fields.worldedit_gui_cylinder_axis then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_cylinder_axis]\r
- worldedit.show_page(name, "worldedit_gui_cylinder")\r
- return true\r
- end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_pyramid", {\r
local nodename = worldedit.normalize_nodename(node)\r
return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_pyramid") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_pyramid_node;Name;%s]", minetest.formspec_escape(node)) ..\r
+ "field_close_on_enter[worldedit_gui_pyramid_node;false]" ..\r
"button[4,1.18;1.5,0.8;worldedit_gui_pyramid_search;Search]" ..\r
formspec_node("5.5,1.1", nodename) ..\r
string.format("field[0.5,2.5;4,0.8;worldedit_gui_pyramid_length;Length;%s]", minetest.formspec_escape(length)) ..\r
string.format("dropdown[4,2.18;2.5;worldedit_gui_pyramid_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
+ "field_close_on_enter[worldedit_gui_pyramid_length;false]" ..\r
"button_exit[0,3.5;3,0.8;worldedit_gui_pyramid_submit_hollow;Hollow Pyramid]" ..\r
"button_exit[3.5,3.5;3,0.8;worldedit_gui_pyramid_submit_solid;Solid Pyramid]"\r
end,\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_pyramid", function(name, fields)\r
- if fields.worldedit_gui_pyramid_search or fields.worldedit_gui_pyramid_submit_solid or fields.worldedit_gui_pyramid_submit_hollow or fields.worldedit_gui_pyramid_axis then\r
- gui_nodename1[name] = tostring(fields.worldedit_gui_pyramid_node)\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_pyramid_axis]\r
- gui_distance1[name] = tostring(fields.worldedit_gui_pyramid_length)\r
+ local cg = {\r
+ worldedit_gui_pyramid_search = true,\r
+ worldedit_gui_pyramid_node = gui_nodename1,\r
+ worldedit_gui_pyramid_axis = gui_axis1,\r
+ worldedit_gui_pyramid_length = gui_distance1,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_pyramid", fields, cg)\r
+ if fields.worldedit_gui_pyramid_submit_solid or fields.worldedit_gui_pyramid_submit_hollow then\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_pyramid")\r
\r
- local submit = nil\r
- if fields.worldedit_gui_pyramid_submit_solid then\r
- submit = "pyramid"\r
- elseif fields.worldedit_gui_pyramid_submit_hollow then\r
+ local submit = "pyramid"\r
+ if fields.worldedit_gui_pyramid_submit_hollow then\r
submit = "hollowpyramid"\r
end\r
- if submit then\r
- local n = worldedit.normalize_nodename(gui_nodename1[name])\r
- if n then\r
- minetest.chatcommands["/"..submit].func(name, string.format("%s %s %s", axis_values[gui_axis1[name]], gui_distance1[name], n))\r
- end\r
+ local n = worldedit.normalize_nodename(gui_nodename1[name])\r
+ if n then\r
+ minetest.chatcommands["/"..submit].func(name, string.format("%s %s %s", axis_values[gui_axis1[name]], gui_distance1[name], n))\r
end\r
return true\r
end\r
- if fields.worldedit_gui_pyramid_axis then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_pyramid_axis]\r
- worldedit.show_page(name, "worldedit_gui_pyramid")\r
- return true\r
- end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_spiral", {\r
local nodename = worldedit.normalize_nodename(node)\r
return "size[6.5,6]" .. worldedit.get_formspec_header("worldedit_gui_spiral") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_spiral_node;Name;%s]", minetest.formspec_escape(node)) ..\r
+ "field_close_on_enter[worldedit_gui_spiral_node;false]" ..\r
"button[4,1.18;1.5,0.8;worldedit_gui_spiral_search;Search]" ..\r
formspec_node("5.5,1.1", nodename) ..\r
string.format("field[0.5,2.5;4,0.8;worldedit_gui_spiral_length;Side Length;%s]", minetest.formspec_escape(length)) ..\r
string.format("field[0.5,3.5;4,0.8;worldedit_gui_spiral_height;Height;%s]", minetest.formspec_escape(height)) ..\r
string.format("field[0.5,4.5;4,0.8;worldedit_gui_spiral_space;Wall Spacing;%s]", minetest.formspec_escape(space)) ..\r
+ "field_close_on_enter[worldedit_gui_spiral_length;false]" ..\r
+ "field_close_on_enter[worldedit_gui_spiral_height;false]" ..\r
+ "field_close_on_enter[worldedit_gui_spiral_space;false]" ..\r
"button_exit[0,5.5;3,0.8;worldedit_gui_spiral_submit;Spiral]"\r
end,\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_spiral", function(name, fields)\r
- if fields.worldedit_gui_spiral_search or fields.worldedit_gui_spiral_submit then\r
- gui_nodename1[name] = fields.worldedit_gui_spiral_node\r
- gui_distance1[name] = tostring(fields.worldedit_gui_spiral_length)\r
- gui_distance2[name] = tostring(fields.worldedit_gui_spiral_height)\r
- gui_distance3[name] = tostring(fields.worldedit_gui_spiral_space)\r
+ local cg = {\r
+ worldedit_gui_spiral_search = true,\r
+ worldedit_gui_spiral_node = gui_nodename1,\r
+ worldedit_gui_spiral_length = gui_distance1,\r
+ worldedit_gui_spiral_height = gui_distance2,\r
+ worldedit_gui_spiral_space = gui_distance3,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_spiral", fields, cg)\r
+ if fields.worldedit_gui_spiral_submit then\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_spiral")\r
- if fields.worldedit_gui_spiral_submit then\r
- local n = worldedit.normalize_nodename(gui_nodename1[name])\r
- if n then\r
- minetest.chatcommands["/spiral"].func(name, string.format("%s %s %s %s", gui_distance1[name], gui_distance2[name], gui_distance3[name], n))\r
- end\r
+\r
+ local n = worldedit.normalize_nodename(gui_nodename1[name])\r
+ if n then\r
+ minetest.chatcommands["/spiral"].func(name, string.format("%s %s %s %s", gui_distance1[name], gui_distance2[name], gui_distance3[name], n))\r
end\r
return true\r
end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_copy_move", {\r
return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_copy_move") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_copy_move_amount;Amount;%s]", minetest.formspec_escape(amount)) ..\r
string.format("dropdown[4,1.18;2.5;worldedit_gui_copy_move_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
+ "field_close_on_enter[worldedit_gui_copy_move_amount;false]" ..\r
"button_exit[0,2.5;3,0.8;worldedit_gui_copy_move_copy;Copy Region]" ..\r
"button_exit[3.5,2.5;3,0.8;worldedit_gui_copy_move_move;Move Region]"\r
end,\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_copy_move", function(name, fields)\r
+ local cg = {\r
+ worldedit_gui_copy_move_amount = gui_distance1,\r
+ worldedit_gui_copy_move_axis = gui_axis1,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_spiral", fields, cg)\r
if fields.worldedit_gui_copy_move_copy or fields.worldedit_gui_copy_move_move then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_copy_move_axis] or 4\r
- gui_distance1[name] = tostring(fields.worldedit_gui_copy_move_amount)\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_copy_move")\r
- if fields.worldedit_gui_copy_move_copy then\r
- minetest.chatcommands["/copy"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_distance1[name]))\r
- else --fields.worldedit_gui_copy_move_move\r
- minetest.chatcommands["/move"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_distance1[name]))\r
+\r
+ local submit = "copy"\r
+ if fields.worldedit_gui_copy_move_move then\r
+ submit = "move"\r
end\r
+ minetest.chatcommands["/"..submit].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_distance1[name]))\r
return true\r
end\r
- if fields.worldedit_gui_copy_move_axis then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_copy_move_axis] or 4\r
- worldedit.show_page(name, "worldedit_gui_copy_move")\r
- return true\r
- end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_stack", {\r
return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_stack") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_stack_count;Count;%s]", minetest.formspec_escape(count)) ..\r
string.format("dropdown[4,1.18;2.5;worldedit_gui_stack_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
+ "field_close_on_enter[worldedit_gui_stack_count;false]" ..\r
"button_exit[0,2.5;3,0.8;worldedit_gui_stack_submit;Stack]"\r
end,\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_stack", function(name, fields)\r
+ local cg = {\r
+ worldedit_gui_stack_axis = gui_axis1,\r
+ worldedit_gui_stack_count = gui_count1,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_stack", fields, cg)\r
if fields.worldedit_gui_stack_submit then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_stack_axis]\r
- gui_count1[name] = tostring(fields.worldedit_gui_stack_count)\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_stack")\r
+\r
minetest.chatcommands["/stack"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_count1[name]))\r
return true\r
end\r
- if fields.worldedit_gui_stack_axis then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_stack_axis]\r
- worldedit.show_page(name, "worldedit_gui_stack")\r
- return true\r
- end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_stretch", {\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_stretch_x;Stretch X;%s]", minetest.formspec_escape(stretchx)) ..\r
string.format("field[0.5,2.5;4,0.8;worldedit_gui_stretch_y;Stretch Y;%s]", minetest.formspec_escape(stretchy)) ..\r
string.format("field[0.5,3.5;4,0.8;worldedit_gui_stretch_z;Stretch Z;%s]", minetest.formspec_escape(stretchz)) ..\r
+ "field_close_on_enter[worldedit_gui_stretch_x;false]" ..\r
+ "field_close_on_enter[worldedit_gui_stretch_y;false]" ..\r
+ "field_close_on_enter[worldedit_gui_stretch_z;false]" ..\r
"button_exit[0,4.5;3,0.8;worldedit_gui_stretch_submit;Stretch]"\r
end,\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_stretch", function(name, fields)\r
+ local cg = {\r
+ worldedit_gui_stretch_x = gui_count1,\r
+ worldedit_gui_stretch_y = gui_count2,\r
+ worldedit_gui_stretch_z = gui_count3,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_stretch", fields, cg)\r
if fields.worldedit_gui_stretch_submit then\r
- gui_count1[name] = tostring(fields.worldedit_gui_stretch_x)\r
- gui_count2[name] = tostring(fields.worldedit_gui_stretch_y)\r
- gui_count3[name] = tostring(fields.worldedit_gui_stretch_z)\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_stretch")\r
+\r
minetest.chatcommands["/stretch"].func(name, string.format("%s %s %s", gui_count1[name], gui_count2[name], gui_count3[name]))\r
return true\r
end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_transpose", {\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_transpose", function(name, fields)\r
+ local cg = {\r
+ worldedit_gui_transpose_axis1 = gui_axis1,\r
+ worldedit_gui_transpose_axis2 = gui_axis2,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_transpose", fields, cg)\r
if fields.worldedit_gui_transpose_submit then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_transpose_axis1]\r
- worldedit.show_page(name, "worldedit_gui_transpose")\r
+ copy_changes(name, fields, cg)\r
+\r
minetest.chatcommands["/transpose"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], axis_values[gui_axis2[name]]))\r
return true\r
end\r
- if fields.worldedit_gui_transpose_axis1 then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_transpose_axis1]\r
- worldedit.show_page(name, "worldedit_gui_transpose")\r
- return true\r
- end\r
- if fields.worldedit_gui_transpose_axis2 then\r
- gui_axis2[name] = axis_indices[fields.worldedit_gui_transpose_axis2]\r
- worldedit.show_page(name, "worldedit_gui_transpose")\r
- return true\r
- end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_flip", {\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_flip", function(name, fields)\r
+ local cg = {\r
+ worldedit_gui_flip_axis = gui_axis1\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_flip", fields, cg)\r
if fields.worldedit_gui_flip_submit then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_flip_axis]\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_flip")\r
+\r
minetest.chatcommands["/flip"].func(name, axis_values[gui_axis1[name]])\r
return true\r
end\r
- if fields.worldedit_gui_flip_axis then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_flip_axis]\r
- worldedit.show_page(name, "worldedit_gui_flip")\r
- return true\r
- end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_rotate", {\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_rotate", function(name, fields)\r
+ local cg = {\r
+ worldedit_gui_rotate_axis = gui_axis1,\r
+ worldedit_gui_rotate_angle = gui_angle,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_rotate", fields, cg)\r
if fields.worldedit_gui_rotate_submit then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_rotate_axis]\r
- gui_angle[name] = angle_indices[fields.worldedit_gui_rotate_angle]\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_rotate")\r
+\r
minetest.chatcommands["/rotate"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], angle_values[gui_angle[name]]))\r
return true\r
end\r
- if fields.worldedit_gui_rotate_axis then\r
- gui_axis1[name] = axis_indices[fields.worldedit_gui_rotate_axis]\r
- worldedit.show_page(name, "worldedit_gui_rotate")\r
- return true\r
- end\r
- if fields.worldedit_gui_rotate_angle then\r
- gui_angle[name] = angle_indices[fields.worldedit_gui_rotate_angle]\r
- worldedit.show_page(name, "worldedit_gui_rotate")\r
- return true\r
- end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_orient", {\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_orient", function(name, fields)\r
+ local cg = {\r
+ worldedit_gui_orient_angle = gui_angle,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_orient", fields, cg)\r
if fields.worldedit_gui_orient_submit then\r
- gui_angle[name] = angle_indices[fields.worldedit_gui_orient_angle]\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_orient")\r
+\r
minetest.chatcommands["/orient"].func(name, tostring(angle_values[gui_angle[name]]))\r
return true\r
end\r
- if fields.worldedit_gui_orient_angle then\r
- gui_angle[name] = angle_indices[fields.worldedit_gui_orient_angle]\r
- worldedit.show_page(name, "worldedit_gui_orient")\r
- return true\r
- end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_fixlight", {\r
local nodename = worldedit.normalize_nodename(node)\r
return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_suppress") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_suppress_node;Name;%s]", minetest.formspec_escape(node)) ..\r
+ "field_close_on_enter[worldedit_gui_suppress_node;false]" ..\r
"button[4,1.18;1.5,0.8;worldedit_gui_suppress_search;Search]" ..\r
formspec_node("5.5,1.1", nodename) ..\r
"button_exit[0,2.5;3,0.8;worldedit_gui_suppress_submit;Suppress Nodes]"\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_suppress", function(name, fields)\r
- if fields.worldedit_gui_suppress_search or fields.worldedit_gui_suppress_submit then\r
- gui_nodename1[name] = tostring(fields.worldedit_gui_suppress_node)\r
+ local cg = {\r
+ worldedit_gui_suppress_search = true,\r
+ worldedit_gui_suppress_node = gui_nodename1,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_suppress", fields, cg)\r
+ if fields.worldedit_gui_suppress_submit then\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_suppress")\r
- if fields.worldedit_gui_suppress_submit then\r
- local n = worldedit.normalize_nodename(gui_nodename1[name])\r
- if n then\r
- minetest.chatcommands["/suppress"].func(name, n)\r
- end\r
+\r
+ local n = worldedit.normalize_nodename(gui_nodename1[name])\r
+ if n then\r
+ minetest.chatcommands["/suppress"].func(name, n)\r
end\r
return true\r
end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_highlight", {\r
local nodename = worldedit.normalize_nodename(node)\r
return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_highlight") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_highlight_node;Name;%s]", minetest.formspec_escape(node)) ..\r
+ "field_close_on_enter[worldedit_gui_highlight_node;false]" ..\r
"button[4,1.18;1.5,0.8;worldedit_gui_highlight_search;Search]" ..\r
formspec_node("5.5,1.1", nodename) ..\r
"button_exit[0,2.5;3,0.8;worldedit_gui_highlight_submit;Highlight Nodes]"\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_highlight", function(name, fields)\r
- if fields.worldedit_gui_highlight_search or fields.worldedit_gui_highlight_submit then\r
- gui_nodename1[name] = tostring(fields.worldedit_gui_highlight_node)\r
+ local cg = {\r
+ worldedit_gui_highlight_search = true,\r
+ worldedit_gui_highlight_node = gui_nodename1,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_highlight", fields, cg)\r
+ if fields.worldedit_gui_highlight_submit then\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_highlight")\r
- if fields.worldedit_gui_highlight_submit then\r
- local n = worldedit.normalize_nodename(gui_nodename1[name])\r
- if n then\r
- minetest.chatcommands["/highlight"].func(name, n)\r
- end\r
+\r
+ local n = worldedit.normalize_nodename(gui_nodename1[name])\r
+ if n then\r
+ minetest.chatcommands["/highlight"].func(name, n)\r
end\r
return true\r
end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_restore", {\r
local filename = gui_filename[name]\r
return "size[6,4]" .. worldedit.get_formspec_header("worldedit_gui_save_load") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_save_filename;Filename;%s]", minetest.formspec_escape(filename)) ..\r
+ "field_close_on_enter[worldedit_gui_save_filename;false]" ..\r
"button_exit[0,2.5;3,0.8;worldedit_gui_save_load_submit_save;Save]" ..\r
"button_exit[3,2.5;3,0.8;worldedit_gui_save_load_submit_allocate;Allocate]" ..\r
"button_exit[0,3.5;3,0.8;worldedit_gui_save_load_submit_load;Load]"\r
if fields.worldedit_gui_save_load_submit_save or fields.worldedit_gui_save_load_submit_allocate or fields.worldedit_gui_save_load_submit_load then\r
gui_filename[name] = tostring(fields.worldedit_gui_save_filename)\r
worldedit.show_page(name, "worldedit_gui_save_load")\r
+\r
if fields.worldedit_gui_save_load_submit_save then\r
minetest.chatcommands["/save"].func(name, gui_filename[name])\r
elseif fields.worldedit_gui_save_load_submit_allocate then\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_cube", {\r
- name = "Cuboid", -- technically the command is misnamed, I know...\r
+ name = "Cube",\r
privs = combine_we_privs({"hollowcube", "cube"}),\r
get_formspec = function(name)\r
local width, height, length = gui_distance1[name], gui_distance2[name], gui_distance3[name]\r
local nodename = worldedit.normalize_nodename(node)\r
return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_cube") ..\r
string.format("field[0.5,1.5;4,0.8;worldedit_gui_cube_node;Name;%s]", minetest.formspec_escape(node)) ..\r
+ "field_close_on_enter[worldedit_gui_cube_node;false]" ..\r
"button[4,1.18;1.5,0.8;worldedit_gui_cube_search;Search]" ..\r
formspec_node("5.5,1.1", nodename) ..\r
string.format("field[0.5,2.5;1,0.8;worldedit_gui_cube_width;Width;%s]", minetest.formspec_escape(width)) ..\r
string.format("field[1.5,2.5;1,0.8;worldedit_gui_cube_height;Height;%s]", minetest.formspec_escape(height)) ..\r
string.format("field[2.5,2.5;1,0.8;worldedit_gui_cube_length;Length;%s]", minetest.formspec_escape(length)) ..\r
+ "field_close_on_enter[worldedit_gui_cube_width;false]" ..\r
+ "field_close_on_enter[worldedit_gui_cube_height;false]" ..\r
+ "field_close_on_enter[worldedit_gui_cube_length;false]" ..\r
"button_exit[0,3.5;3,0.8;worldedit_gui_cube_submit_hollow;Hollow Cuboid]" ..\r
"button_exit[3.5,3.5;3,0.8;worldedit_gui_cube_submit_solid;Solid Cuboid]"\r
end,\r
})\r
\r
worldedit.register_gui_handler("worldedit_gui_cube", function(name, fields)\r
- if fields.worldedit_gui_cube_search\r
- or fields.worldedit_gui_cube_submit_hollow or fields.worldedit_gui_cube_submit_solid then\r
- gui_nodename1[name] = tostring(fields.worldedit_gui_cube_node)\r
- gui_distance1[name] = tostring(fields.worldedit_gui_cube_width)\r
- gui_distance2[name] = tostring(fields.worldedit_gui_cube_height)\r
- gui_distance3[name] = tostring(fields.worldedit_gui_cube_length)\r
+ local cg = {\r
+ worldedit_gui_cube_search = true,\r
+ worldedit_gui_cube_node = gui_nodename1,\r
+ worldedit_gui_cube_width = gui_distance1,\r
+ worldedit_gui_cube_height = gui_distance2,\r
+ worldedit_gui_cube_length = gui_distance3,\r
+ }\r
+ local ret = handle_changes(name, "worldedit_gui_cube", fields, cg)\r
+ if fields.worldedit_gui_cube_submit_hollow or fields.worldedit_gui_cube_submit_solid then\r
+ copy_changes(name, fields, cg)\r
worldedit.show_page(name, "worldedit_gui_cube")\r
\r
- local submit = nil\r
- if fields.worldedit_gui_cube_submit_hollow then\r
- submit = "hollowcube"\r
- elseif fields.worldedit_gui_cube_submit_solid then\r
+ local submit = "hollowcube"\r
+ if fields.worldedit_gui_cube_submit_solid then\r
submit = "cube"\r
end\r
- if submit then\r
- local n = worldedit.normalize_nodename(gui_nodename1[name])\r
- if n then\r
- local args = string.format("%s %s %s %s", gui_distance1[name], gui_distance2[name], gui_distance3[name], n)\r
- minetest.chatcommands["/"..submit].func(name, args)\r
- end\r
+ local n = worldedit.normalize_nodename(gui_nodename1[name])\r
+ if n then\r
+ local args = string.format("%s %s %s %s", gui_distance1[name], gui_distance2[name], gui_distance3[name], n)\r
+ minetest.chatcommands["/"..submit].func(name, args)\r
end\r
return true\r
end\r
- return false\r
+ return ret\r
end)\r
\r
worldedit.register_gui_function("worldedit_gui_clearobjects", {\r