]> git.lizzy.rs Git - worldedit.git/commitdiff
Refine GUI.
authorUberi <azhang9@gmail.com>
Thu, 12 Dec 2013 20:34:05 +0000 (15:34 -0500)
committerUberi <azhang9@gmail.com>
Thu, 12 Dec 2013 20:34:05 +0000 (15:34 -0500)
worldedit_commands/init.lua
worldedit_gui/functionality.lua
worldedit_gui/init.lua

index 3ce26ebf7098dc6b4fa7d3d8aaeb8e84fab99758..62b9fa53056759d8227a10c31aae2b844fd76411 100644 (file)
@@ -19,7 +19,7 @@ end
 --determines whether `nodename` is a valid node name, returning a boolean\r
 worldedit.normalize_nodename = function(nodename)\r
        local fullname = ItemStack({name=nodename}):get_name() --resolve aliases of node names to full names\r
-       if minetest.registered_nodes[fullname] then --directly found node name or alias of nodename\r
+       if minetest.registered_nodes[fullname] or fullname == "air" then --directly found node name or alias of nodename\r
                return fullname\r
        end\r
        for key, value in pairs(minetest.registered_nodes) do\r
index 68ade5cfaa9aea220661f3ba9eee24a03e847dbd..ac3a0ab6023168392b91f4bb12b6d2059399ccb6 100644 (file)
@@ -1,70 +1,37 @@
-worldedit.register_gui_function("worldedit_gui_about", {\r
-       name = "About",\r
-       privs = minetest.chatcommands["/about"].privs,\r
-       on_select = function(name)\r
-               minetest.chatcommands["/about"].func(name, "")\r
-       end,\r
-})\r
-\r
-worldedit.register_gui_function("worldedit_gui_inspect", {\r
-       name = "Toggle Inspection",\r
-       privs = minetest.chatcommands["/inspect"].privs,\r
-       on_select = function(name)\r
-               minetest.chatcommands["/inspect"].func(name, worldedit.inspect[name] and "disable" or "enable")\r
-       end,\r
-})\r
-\r
-worldedit.register_gui_function("worldedit_gui_reset", {\r
-       name = "Reset Region",\r
-       privs = minetest.chatcommands["/reset"].privs,\r
-       on_select = function(name)\r
-               minetest.chatcommands["/reset"].func(name, "")\r
-       end,\r
-})\r
-\r
-worldedit.register_gui_function("worldedit_gui_mark", {\r
-       name = "Mark Region",\r
-       privs = minetest.chatcommands["/mark"].privs,\r
-       on_select = function(name)\r
-               minetest.chatcommands["/mark"].func(name, "")\r
-       end,\r
-})\r
-\r
-worldedit.register_gui_function("worldedit_gui_unmark", {\r
-       name = "Unmark Region",\r
-       privs = minetest.chatcommands["/unmark"].privs,\r
-       on_select = function(name)\r
-               minetest.chatcommands["/unmark"].func(name, "")\r
-       end,\r
-})\r
-\r
-worldedit.register_gui_function("worldedit_gui_pos1", {\r
-       name = "Position 1 Here",\r
-       privs = minetest.chatcommands["/pos1"].privs,\r
-       on_select = function(name)\r
-               minetest.chatcommands["/pos1"].func(name, "")\r
-       end,\r
-})\r
-\r
-worldedit.register_gui_function("worldedit_gui_pos2", {\r
-       name = "Position 2 Here",\r
-       privs = minetest.chatcommands["/pos2"].privs,\r
-       on_select = function(name)\r
-               minetest.chatcommands["/pos2"].func(name, "")\r
-       end,\r
-})\r
+--saved state per player\r
+local gui_nodename1 = {}\r
+local gui_nodename2 = {}\r
+local gui_radius = {}\r
+local gui_formspec = {}\r
+\r
+local register_gui_chatcommand = function(identifier, name, command, callback)\r
+       callback = callback or function(name, command) command(name, "") end\r
+       worldedit.register_gui_function(identifier, {\r
+               name = name,\r
+               privs = minetest.chatcommands[command].privs,\r
+               on_select = function(name)\r
+                       return callback(name, minetest.chatcommands[command].func)\r
+               end,\r
+       })\r
+end\r
+\r
+register_gui_chatcommand("worldedit_gui_about", "About", "/about")\r
+register_gui_chatcommand("worldedit_gui_inspect", "Toggle Inspection", "/inspect", function(name, command)\r
+       command(name, worldedit.inspect[name] and "disable" or "enable")\r
+end)\r
+register_gui_chatcommand("worldedit_gui_reset", "Reset Region", "/reset")\r
+register_gui_chatcommand("worldedit_gui_mark", "Mark Region", "/mark")\r
+register_gui_chatcommand("worldedit_gui_unmark", "Unmark Region", "/unmark")\r
 \r
 worldedit.register_gui_function("worldedit_gui_p", {\r
-       name = "Get/Set Positions",\r
-       privs = minetest.chatcommands["/p"].privs,\r
+       name = "Get/Set Positions", privs = minetest.chatcommands["/p"].privs,\r
        get_formspec = function(name)\r
-               return "size[12,2]" ..\r
-                       "button[0,0;2,0.5;worldedit_gui;Back]" ..\r
-                       "label[2,0;WorldEdit GUI > Get/Set Positions]" ..\r
+               return "size[9,2.5]" .. worldedit.get_formspec_header("worldedit_gui_p") ..\r
                        "button_exit[0,1;3,0.8;worldedit_gui_p_get;Get Positions]" ..\r
-                       "button_exit[3,1;3,0.8;worldedit_gui_p_set;Set Positions]" ..\r
-                       "button_exit[6,1;3,0.8;worldedit_gui_p_set1;Set Position 1]" ..\r
-                       "button_exit[9,1;3,0.8;worldedit_gui_p_set2;Set Position 2]"\r
+                       "button_exit[3,1;3,0.8;worldedit_gui_p_set1;Set Position 1]" ..\r
+                       "button_exit[6,1;3,0.8;worldedit_gui_p_set2;Set Position 2]" ..\r
+                       "button_exit[0,2;3,0.8;worldedit_gui_pos1;Position 1 Here]" ..\r
+                       "button_exit[3,2;3,0.8;worldedit_gui_pos2;Position 2 Here]"\r
        end,\r
 })\r
 \r
@@ -72,27 +39,27 @@ worldedit.register_gui_handler("worldedit_gui_p", function(name, fields)
        if fields.worldedit_gui_p_get then\r
                minetest.chatcommands["/p"].func(name, "get")\r
                return true\r
-       elseif fields.worldedit_gui_p_set then\r
-               minetest.chatcommands["/p"].func(name, "set")\r
-               return true\r
        elseif fields.worldedit_gui_p_set1 then\r
                minetest.chatcommands["/p"].func(name, "set1")\r
                return true\r
        elseif fields.worldedit_gui_p_set2 then\r
                minetest.chatcommands["/p"].func(name, "set2")\r
                return true\r
+       elseif fields.worldedit_gui_pos1 then\r
+               minetest.chatcommands["/pos1"].func(name, "")\r
+               return true\r
+       elseif fields.worldedit_gui_pos2 then\r
+               minetest.chatcommands["/pos2"].func(name, "")\r
+               return true\r
        end\r
        return false\r
 end)\r
 \r
-worldedit.register_gui_function("worldedit_gui_fixedpos", {\r
-       name = "Fixed Positions",\r
-       privs = minetest.chatcommands["/fixedpos"].privs,\r
+worldedit.register_gui_function("worldedit_gui_fixedpos", { --wip: combine this with get/set positions\r
+       name = "Fixed Positions", privs = minetest.chatcommands["/fixedpos"].privs,\r
        get_formspec = function(name)\r
                local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]\r
-               return "size[6.5,4]" ..\r
-                       "button[0,0;2,0.5;worldedit_gui;Back]" ..\r
-                       "label[2,0;WorldEdit GUI > Fixed Positions]" ..\r
+               return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_fixedpos") ..\r
                        "label[0,1.2;Position 1]" ..\r
                        string.format("field[2,1.5;1.5,0.8;worldedit_gui_fixedpos_pos1x;Axis X;%s]", pos1 and pos1.x or "") ..\r
                        string.format("field[3.5,1.5;1.5,0.8;worldedit_gui_fixedpos_pos1y;Axis Y;%s]", pos1 and pos1.y or "") ..\r
@@ -101,147 +68,148 @@ worldedit.register_gui_function("worldedit_gui_fixedpos", {
                        string.format("field[2,2.5;1.5,0.8;worldedit_gui_fixedpos_pos2x;Axis X;%s]", pos2 and pos2.x or "") ..\r
                        string.format("field[3.5,2.5;1.5,0.8;worldedit_gui_fixedpos_pos2y;Axis Y;%s]", pos2 and pos2.y or "") ..\r
                        string.format("field[5,2.5;1.5,0.8;worldedit_gui_fixedpos_pos2z;Axis Z;%s]", pos2 and pos2.z or "") ..\r
-                       "button_exit[0,3.5;4,0.8;worldedit_gui_fixedpos_submit;Set Fixed Positions]"\r
+                       "button_exit[0,3.5;3,0.8;worldedit_gui_fixedpos_submit;Set Positions]"\r
        end\r
 })\r
 \r
 worldedit.register_gui_handler("worldedit_gui_fixedpos", function(name, fields)\r
        if fields.worldedit_gui_fixedpos_submit then\r
-               if tonumber(fields.worldedit_gui_fixedpos_pos1x) and tonumber(fields.worldedit_gui_fixedpos_pos1y) and tonumber(fields.worldedit_gui_fixedpos_pos1z) then\r
-                       minetest.chatcommands["/fixedpos"].func(name, string.format("set1 %d %d %d",\r
-                               tonumber(fields.worldedit_gui_fixedpos_pos1x), tonumber(fields.worldedit_gui_fixedpos_pos1y), tonumber(fields.worldedit_gui_fixedpos_pos1z)))\r
+               local x1, y1, z1 = tonumber(fields.worldedit_gui_fixedpos_pos1x), tonumber(fields.worldedit_gui_fixedpos_pos1y), tonumber(fields.worldedit_gui_fixedpos_pos1z)\r
+               if x1 and y1 and z1 then\r
+                       minetest.chatcommands["/fixedpos"].func(name, string.format("set1 %d %d %d", x1, y1, z1))\r
                end\r
-               if tonumber(fields.worldedit_gui_fixedpos_pos2x) and tonumber(fields.worldedit_gui_fixedpos_pos2y) and tonumber(fields.worldedit_gui_fixedpos_pos2z) then\r
-                       minetest.chatcommands["/fixedpos"].func(name, string.format("set2 %d %d %d",\r
-                               tonumber(fields.worldedit_gui_fixedpos_pos2x), tonumber(fields.worldedit_gui_fixedpos_pos2y), tonumber(fields.worldedit_gui_fixedpos_pos2z)))\r
+               local x2, y2, z2 = tonumber(fields.worldedit_gui_fixedpos_pos2x), tonumber(fields.worldedit_gui_fixedpos_pos2y), tonumber(fields.worldedit_gui_fixedpos_pos2z)\r
+               if x2 and y2 and z2 then\r
+                       minetest.chatcommands["/fixedpos"].func(name, string.format("set2 %d %d %d", x2, y2, z2))\r
                end\r
                return true\r
        end\r
        return false\r
 end)\r
 \r
-worldedit.register_gui_function("worldedit_gui_volume", {\r
-       name = "Region Volume",\r
-       privs = minetest.chatcommands["/volume"].privs,\r
-       on_select = function(name)\r
-               minetest.chatcommands["/volume"].func(name, "")\r
-       end,\r
-})\r
+register_gui_chatcommand("worldedit_gui_volume", "Region Volume", "/volume")\r
 \r
-local gui_nodename_set = {}\r
 worldedit.register_gui_function("worldedit_gui_set", {\r
-       name = "Set Nodes",\r
-       privs = minetest.chatcommands["/set"].privs,\r
+       name = "Set Nodes", privs = minetest.chatcommands["/set"].privs,\r
        get_formspec = function(name)\r
-               local value = gui_nodename_set[name] or "Cobblestone"\r
+               local value = gui_nodename1[name] or "Cobblestone"\r
                local nodename = worldedit.normalize_nodename(value)\r
-               value = nodename or value\r
-               return "size[6.5,3]" ..\r
-                       "button[0,0;2,0.5;worldedit_gui;Back]" ..\r
-                       "label[2,0;WorldEdit GUI > Set Nodes]" ..\r
+               return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_set") ..\r
                        string.format("field[0.5,1.5;4,0.8;worldedit_gui_set_node;Name;%s]", minetest.formspec_escape(value)) ..\r
                        "button[4,1.18;1.5,0.8;worldedit_gui_set_search;Search]" ..\r
-                       (nodename and string.format("item_image[5.5,1.18;1,1;%s]", nodename)\r
-                               or "image[5.5,1.18;1,1;unknown_node.png]") ..\r
-                       "button_exit[0,2.5;4,0.8;worldedit_gui_set_submit;Set Nodes]"\r
+                       (nodename and string.format("item_image[5.5,1.1;1,1;%s]", nodename)\r
+                               or "image[5.5,1.1;1,1;unknown_node.png]") ..\r
+                       "button_exit[0,2.5;3,0.8;worldedit_gui_set_submit;Set Nodes]"\r
        end,\r
 })\r
 \r
 worldedit.register_gui_handler("worldedit_gui_set", function(name, fields)\r
        if fields.worldedit_gui_set_search then\r
-               gui_nodename_set[name] = fields.worldedit_gui_set_node\r
+               gui_nodename1[name] = fields.worldedit_gui_set_node\r
                worldedit.show_page(name, "worldedit_gui_set")\r
                return true\r
        elseif fields.worldedit_gui_set_submit then\r
-               gui_nodename_set[name] = fields.worldedit_gui_set_node\r
-               minetest.chatcommands["/set"].func(name, gui_nodename_set[name])\r
+               gui_nodename1[name] = fields.worldedit_gui_set_node\r
+               minetest.chatcommands["/set"].func(name, gui_nodename1[name])\r
                return true\r
        end\r
        return false\r
 end)\r
 \r
-local gui_nodename_replace = {}\r
 worldedit.register_gui_function("worldedit_gui_replace", {\r
-       name = "Replace Nodes",\r
-       privs = minetest.chatcommands["/replace"].privs,\r
+       name = "Replace Nodes", privs = minetest.chatcommands["/replace"].privs,\r
        get_formspec = function(name)\r
-               local search_value = gui_nodename_set[name] or "Cobblestone"\r
-               local search_nodename = worldedit.normalize_nodename(search_value)\r
-               search_value = search_nodename or search_value\r
-               local replace_value, replace_nodename = gui_nodename_replace[name] or "Stone"\r
-               local replace_nodename = worldedit.normalize_nodename(replace_value)\r
-               replace_value = replace_nodename or replace_value\r
-               return "size[6,4]" ..\r
-                       "button[0,0;2,0.5;worldedit_gui;Back]" ..\r
-                       "label[2,0;WorldEdit GUI > Replace Nodes]" ..\r
-                       string.format("field[0.5,1.5;4,0.8;worldedit_gui_replace_search;Name;%s]", minetest.formspec_escape(search_value)) ..\r
+               local search = gui_nodename1[name] or "Cobblestone"\r
+               local search_nodename = worldedit.normalize_nodename(search)\r
+               local replace = gui_nodename2[name] or "Stone"\r
+               local replace_nodename = worldedit.normalize_nodename(replace)\r
+               return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_replace") ..\r
+                       string.format("field[0.5,1.5;4,0.8;worldedit_gui_replace_search;Name;%s]", minetest.formspec_escape(search)) ..\r
                        "button[4,1.18;1.5,0.8;worldedit_gui_replace_search_search;Search]" ..\r
-                       (search_nodename and string.format("item_image[5.5,1.18;1,1;%s]", search_nodename)\r
-                               or "image[5.5,1.18;1,1;unknown_node.png]") ..\r
-                       string.format("field[0.5,2.5;4,0.8;worldedit_gui_replace_replace;Name;%s]", minetest.formspec_escape(replace_value)) ..\r
+                       (search_nodename and string.format("item_image[5.5,1.1;1,1;%s]", search_nodename)\r
+                               or "image[5.5,1.1;1,1;unknown_node.png]") ..\r
+                       string.format("field[0.5,2.5;4,0.8;worldedit_gui_replace_replace;Name;%s]", minetest.formspec_escape(replace)) ..\r
                        "button[4,2.18;1.5,0.8;worldedit_gui_replace_replace_search;Search]" ..\r
-                       (replace_nodename and string.format("item_image[5.5,2.18;1,1;%s]", replace_nodename)\r
-                               or "image[5.5,2.18;1,1;unknown_node.png]") ..\r
-                       "button_exit[0,3.5;4,0.8;worldedit_gui_replace_submit;Replace Nodes]"\r
+                       (replace_nodename and string.format("item_image[5.5,2.1;1,1;%s]", replace_nodename)\r
+                               or "image[5.5,2.1;1,1;unknown_node.png]") ..\r
+                       "button_exit[0,3.5;3,0.8;worldedit_gui_replace_submit;Replace Nodes]" ..\r
+                       "button_exit[3.5,3.5;3,0.8;worldedit_gui_replace_submit_inverse;Replace Inverse]"\r
        end,\r
 })\r
 \r
 worldedit.register_gui_handler("worldedit_gui_replace", function(name, fields)\r
        if fields.worldedit_gui_replace_search_search then\r
-               gui_nodename_set[name] = fields.worldedit_gui_replace_search\r
+               gui_nodename1[name] = fields.worldedit_gui_replace_search\r
                worldedit.show_page(name, "worldedit_gui_replace")\r
                return true\r
        elseif fields.worldedit_gui_replace_replace_search then\r
-               gui_nodename_replace[name] = fields.worldedit_gui_replace_replace\r
+               gui_nodename2[name] = fields.worldedit_gui_replace_replace\r
                worldedit.show_page(name, "worldedit_gui_replace")\r
                return true\r
-       elseif fields.worldedit_gui_replace_submit then\r
-               gui_nodename_set[name] = fields.worldedit_gui_replace_search\r
-               gui_nodename_replace[name] = fields.worldedit_gui_replace_replace\r
-               minetest.chatcommands["/replace"].func(name, string.format("%s %s", gui_nodename_set[name], gui_nodename_replace[name]))\r
+       elseif fields.worldedit_gui_replace_submit or fields.worldedit_gui_replace_submit_inverse then\r
+               gui_nodename1[name] = fields.worldedit_gui_replace_search\r
+               gui_nodename2[name] = fields.worldedit_gui_replace_replace\r
+               if fields.worldedit_gui_replace_submit then\r
+                       minetest.chatcommands["/replace"].func(name, string.format("%s %s", gui_nodename1[name], gui_nodename2[name]))\r
+               else\r
+                       minetest.chatcommands["/replaceinverse"].func(name, string.format("%s %s", gui_nodename1[name], gui_nodename2[name]))\r
+               end\r
                return true\r
        end\r
        return false\r
 end)\r
 \r
-worldedit.register_gui_function("worldedit_gui_replaceinverse", {\r
-       name = "Replace Inverse",\r
-       privs = minetest.chatcommands["/replaceinverse"].privs,\r
+worldedit.register_gui_function("worldedit_gui_sphere", {\r
+       name = "Sphere", privs = minetest.chatcommands["/sphere"].privs,\r
        get_formspec = function(name)\r
-               local search_value = gui_nodename_set[name] or "Cobblestone"\r
-               local search_nodename = worldedit.normalize_nodename(search_value)\r
-               search_value = search_nodename or search_value\r
-               local replace_value, replace_nodename = gui_nodename_replace[name] or "Stone"\r
-               local replace_nodename = worldedit.normalize_nodename(replace_value)\r
-               replace_value = replace_nodename or replace_value\r
-               return "size[6,4]" ..\r
-                       "button[0,0;2,0.5;worldedit_gui;Back]" ..\r
-                       "label[2,0;WorldEdit GUI > Replace Inverse]" ..\r
-                       string.format("field[0.5,1.5;4,0.8;worldedit_gui_replaceinverse_search;Name;%s]", minetest.formspec_escape(search_value)) ..\r
-                       "button[4,1.18;1.5,0.8;worldedit_gui_replaceinverse_search_search;Search]" ..\r
-                       (search_nodename and string.format("item_image[5.5,1.18;1,1;%s]", search_nodename)\r
-                               or "image[5.5,1.18;1,1;unknown_node.png]") ..\r
-                       string.format("field[0.5,2.5;4,0.8;worldedit_gui_replaceinverse_replace;Name;%s]", minetest.formspec_escape(replace_value)) ..\r
-                       "button[4,2.18;1.5,0.8;worldedit_gui_replaceinverse_replace_search;Search]" ..\r
-                       (replace_nodename and string.format("item_image[5.5,2.18;1,1;%s]", replace_nodename)\r
-                               or "image[5.5,2.18;1,1;unknown_node.png]") ..\r
-                       "button_exit[0,3.5;4,0.8;worldedit_gui_replaceinverse_submit;Replace Inverse]"\r
+               local value = gui_nodename1[name] or "Cobblestone"\r
+               local radius = gui_radius[name] or "5"\r
+               local nodename = worldedit.normalize_nodename(value)\r
+               return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_sphere") ..\r
+                       string.format("field[0.5,1.5;4,0.8;worldedit_gui_sphere_node;Name;%s]", minetest.formspec_escape(value)) ..\r
+                       "button[4,1.18;1.5,0.8;worldedit_gui_sphere_search;Search]" ..\r
+                       (nodename and string.format("item_image[5.5,1.1;1,1;%s]", nodename)\r
+                               or "image[5.5,1.1;1,1;unknown_node.png]") ..\r
+                       string.format("field[0.5,2.5;4,0.8;worldedit_gui_sphere_radius;Radius;%s]", minetest.formspec_escape(radius)) ..\r
+                       "button_exit[0,3.5;3,0.8;worldedit_gui_sphere_submit_hollow;Hollow Sphere]" ..\r
+                       "button_exit[3.5,3.5;3,0.8;worldedit_gui_sphere_submit_solid;Solid Sphere]"\r
        end,\r
 })\r
 \r
-worldedit.register_gui_handler("worldedit_gui_replaceinverse", function(name, fields)\r
-       if fields.worldedit_gui_replaceinverse_search_search then\r
-               gui_nodename_set[name] = fields.worldedit_gui_replaceinverse_search\r
-               worldedit.show_page(name, "worldedit_gui_replaceinverse")\r
+worldedit.register_gui_handler("worldedit_gui_sphere", function(name, fields)\r
+       if fields.worldedit_gui_sphere_search then\r
+               gui_nodename1[name] = fields.worldedit_gui_sphere_node\r
+               worldedit.show_page(name, "worldedit_gui_sphere")\r
                return true\r
-       elseif fields.worldedit_gui_replaceinverse_replace_search then\r
-               gui_nodename_replace[name] = fields.worldedit_gui_replaceinverse_replace\r
-               worldedit.show_page(name, "worldedit_gui_replaceinverse")\r
+       elseif fields.worldedit_gui_sphere_submit_hollow or fields.worldedit_gui_sphere_submit_solid then\r
+               gui_nodename1[name] = fields.worldedit_gui_sphere_node\r
+               gui_radius[name] = fields.worldedit_gui_sphere_radius\r
+               print(minetest.serialize(fields))\r
+               if fields.worldedit_gui_sphere_submit_hollow then\r
+                       minetest.chatcommands["/hollowsphere"].func(name, string.format("%s %s", gui_radius[name], gui_nodename1[name]))\r
+               else\r
+                       minetest.chatcommands["/sphere"].func(name, string.format("%s %s", gui_radius[name], gui_nodename1[name]))\r
+               end\r
                return true\r
-       elseif fields.worldedit_gui_replaceinverse_submit then\r
-               gui_nodename_set[name] = fields.worldedit_gui_replaceinverse_search\r
-               gui_nodename_replace[name] = fields.worldedit_gui_replaceinverse_replace\r
-               minetest.chatcommands["/replaceinverse"].func(name, string.format("%s %s", gui_nodename_set[name], gui_nodename_replace[name]))\r
+       end\r
+       return false\r
+end)\r
+\r
+worldedit.register_gui_function("worldedit_gui_formspec_tester", {\r
+       name = "Formspec Tester",\r
+       get_formspec = function(name)\r
+               local value = gui_formspec[name] or ""\r
+               return "size[8,6.5]" .. worldedit.get_formspec_header("worldedit_gui_formspec_tester") ..\r
+                       string.format("textarea[0.5,1;7.5,5.5;worldedit_gui_formspec_tester_value;Formspec Code;%s]", minetest.formspec_escape(value)) ..\r
+                       "button_exit[0,6;3,0.8;worldedit_gui_formspec_tester_show;Show Formspec]"\r
+       end,\r
+})\r
+\r
+worldedit.register_gui_handler("worldedit_gui_formspec_tester", function(name, fields)\r
+       if fields.worldedit_gui_formspec_tester_show then\r
+               gui_formspec[name] = fields.worldedit_gui_formspec_tester_value or ""\r
+               worldedit.show_page(name, "worldedit_gui_formspec_tester")\r
+               minetest.show_formspec(name, "worldedit:formspec_tester", gui_formspec[name])\r
                return true\r
        end\r
        return false\r
index 3aca3a910f21f9b02815453d2a487f11ff420ede..8e3b3524b22bc4181e51911f97cacca4d12f6711 100644 (file)
@@ -1,5 +1,6 @@
 --wip: make back buttons images in all screens
 --wip: support unified_inventory, it even seems to have some sort of API now
+--wip: make it look good with image buttons and stuff
 
 worldedit = worldedit or {}
 
@@ -55,11 +56,17 @@ worldedit.register_gui_handler = function(identifier, handler)
        end)
 end
 
+worldedit.get_formspec_header = function(identifier)
+       local entry = worldedit.pages[identifier] or {}
+       return "button[0,0;2,0.5;worldedit_gui;Back]" ..
+               string.format("label[2,0;WorldEdit GUI > %s]", entry.name or "")
+end
+
 local get_formspec = function(name, identifier)
        if worldedit.pages[identifier] then
                return worldedit.pages[identifier].get_formspec(name)
        end
-       return worldedit.pages["worldedit_gui"].get_formspec(name)
+       return worldedit.pages["worldedit_gui"].get_formspec(name) --default to showing main page if an unknown page is given
 end
 
 worldedit.show_page = function(name, page)
@@ -70,25 +77,13 @@ end
 --add button to inventory_plus if it is installed
 if inventory_plus then
        minetest.register_on_joinplayer(function(player)
-               --ensure player has permission to perform action
-               if minetest.check_player_privs(player:get_player_name(), {worldedit=true}) then
-                       inventory_plus.register_button(player, "worldedit_gui", "WorldEdit")
-               end
+               inventory_plus.register_button(player, "worldedit_gui", "WorldEdit")
        end)
 
        --show the form when the button is pressed
        minetest.register_on_player_receive_fields(function(player, formname, fields)
-               local name = player:get_player_name()
-
-               --ensure player has permission to perform action
-               if not minetest.check_player_privs(name, {worldedit=true}) then
-                       return false
-               end
-
-               --check for showing of main GUI
-               local next_page = nil
                if fields.worldedit_gui then --main page
-                       worldedit.show_page(name, "worldedit_gui")
+                       worldedit.show_page(player:get_player_name(), "worldedit_gui")
                        return true
                end
                return false
@@ -119,7 +114,7 @@ worldedit.register_gui_function("worldedit_gui", {
                                end
                        end
                end
-               return string.format("size[%g,%g]", columns * width, y + 0.5) ..
+               return string.format("size[%g,%g]", math.max(columns * width, 5), math.max(y + 0.5, 3)) ..
                        (inventory_plus and "button[0,0;2,0.5;main;Back]" or "button_exit[0,0;2,0.5;main;Exit]") ..
                        "label[2,0;WorldEdit GUI]" ..
                        table.concat(buttons)
@@ -131,7 +126,9 @@ worldedit.register_gui_handler("worldedit_gui", function(name, fields)
        for identifier, entry in pairs(worldedit.pages) do
                if fields[identifier] then
                        --ensure player has permission to perform action
-                       if not minetest.check_player_privs(name, entry.privs or {}) then
+                       local has_privs, missing_privs = minetest.check_player_privs(name, entry.privs or {})
+                       if not has_privs then
+                               worldedit.player_notify(name, "you are not allowed to use this function (missing privileges: " .. table.concat(missing_privs, ", ") .. ")")
                                return false
                        end
                        if entry.on_select then