Implement pages
This commit is contained in:
parent
34c4a92b8f
commit
c5926fed8f
38
init.lua
38
init.lua
@ -1,11 +1,15 @@
|
||||
select_item = {}
|
||||
local get_items = function()
|
||||
return minetest.registered_items
|
||||
local it = {}
|
||||
for itemstring, itemdef in pairs(minetest.registered_items) do
|
||||
table.insert(it, {itemstring=itemstring, itemdef=itemdef})
|
||||
end
|
||||
return it
|
||||
end
|
||||
|
||||
local check_item = function(itemstring, filter)
|
||||
local itemdef = minetest.registered_items[itemstring]
|
||||
if itemstring == "air" or itemstring == "ignore" then
|
||||
if itemstring == "air" or itemstring == "ignore" or itemstring == "unknown" then
|
||||
return false
|
||||
end
|
||||
if itemdef.description == nil or itemdef.description == "" then
|
||||
@ -20,13 +24,17 @@ end
|
||||
local xsize = 18
|
||||
local ysize = 9
|
||||
|
||||
select_item.select_item = function(playername, filter)
|
||||
select_item.select_item = function(playername, filter, page)
|
||||
local form = "size["..xsize..","..(ysize+1).."]"
|
||||
local items = get_items()
|
||||
local x = 0
|
||||
local y = 0.5
|
||||
if page == nil then page = 1 end
|
||||
local start = 1 + (page-1) * xsize * ysize
|
||||
form = form .. "label[0,0;Select an item:]"
|
||||
for itemstring, itemdef in pairs(items) do
|
||||
for i=start, #items do
|
||||
local itemstring = items[i].itemstring
|
||||
local itemdef = items[i].itemdef
|
||||
if check_item(itemstring, filter) then
|
||||
local name = "item_"..itemstring
|
||||
form = form .. "item_image_button["..x..","..y..";1,1;"..itemstring..";"..name..";]"
|
||||
@ -41,13 +49,23 @@ select_item.select_item = function(playername, filter)
|
||||
end
|
||||
end
|
||||
end
|
||||
form = form .. "button[0,"..y..";1,1;previous;<]"
|
||||
form = form .. "button[1,"..y..";1,1;next;>]"
|
||||
form = form .. "button["..(xsize-4)..","..y..";2,1;cancel;Cancel]"
|
||||
form = form .. "button["..(xsize-2)..","..y..";2,1;done;OK]"
|
||||
minetest.show_formspec(playername, "select_item:select_item", form)
|
||||
local ynav = (ysize + 0.5)
|
||||
form = form .. "button[0,"..ynav..";1,1;previous;<]"
|
||||
form = form .. "button[1,"..ynav..";1,1;next;>]"
|
||||
form = form .. "button["..(xsize-4)..","..ynav..";2,1;cancel;Cancel]"
|
||||
form = form .. "button["..(xsize-2)..","..ynav..";2,1;done;OK]"
|
||||
minetest.show_formspec(playername, "select_item:page"..page, form)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
-- TODO
|
||||
if string.sub(formname, 1, 16) == "select_item:page" then
|
||||
local page = tonumber(string.sub(formname, 17, string.len(formname)))
|
||||
if page ~= nil then
|
||||
if fields.previous and page > 1 then
|
||||
select_item.select_item(player:get_player_name(), nil, page - 1)
|
||||
elseif fields.next then
|
||||
select_item.select_item(player:get_player_name(), nil, page + 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
Loading…
x
Reference in New Issue
Block a user