+build_formspec param +part impl gallery callb

This commit is contained in:
Wuzzy 2016-11-29 16:09:56 +01:00
parent 5163f3f7e0
commit 86c56e3364

View File

@ -268,8 +268,9 @@ function doc.show_entry(playername, category_id, entry_id, ignore_hidden)
doc.generate_entry_list(category_id, playername) doc.generate_entry_list(category_id, playername)
playerdata.catsel = playerdata.catsel_list[entry_id] playerdata.catsel = playerdata.catsel_list[entry_id]
playerdata.galidx = 1
local formspec = doc.formspec_core(3)..doc.formspec_entry(category_id, entry_id) local formspec = doc.formspec_core(3)..doc.formspec_entry(category_id, entry_id, playername)
minetest.show_formspec(playername, "doc:entry", formspec) minetest.show_formspec(playername, "doc:entry", formspec)
else else
minetest.show_formspec(playername, "doc:error_hidden", doc.formspec_error_hidden(category_id, entry_id)) minetest.show_formspec(playername, "doc:error_hidden", doc.formspec_error_hidden(category_id, entry_id))
@ -510,13 +511,19 @@ doc.widgets.text = function(data, x, y, width, height)
end end
-- Image gallery -- Image gallery
doc.widgets.gallery = function(imagedata, x, y, aspect_ratio, width, rows, imageindex) doc.widgets.gallery = function(imagedata, playername, x, y, aspect_ratio, width, rows)
if playername == nil then return nil end -- emergency exit
local formstring = "" local formstring = ""
if rows == nil then rows = 3 end
-- Defaults
if x == nil then x = doc.FORMSPEC.ENTRY_START_X end if x == nil then x = doc.FORMSPEC.ENTRY_START_X end
if y == nil then y = doc.FORMSPEC.ENTRY_START_Y end if y == nil then y = doc.FORMSPEC.ENTRY_START_Y end
if width == nil then width = doc.FORMSPEC.ENTRY_WIDTH end if width == nil then width = doc.FORMSPEC.ENTRY_WIDTH end
if imageindex == nil then imageindex = 1 end if rows == nil then rows = 3 end
local imageindex = doc.data.players[playername].galidx
if aspect_ratio == nil then aspect_ratio = (2/3) end if aspect_ratio == nil then aspect_ratio = (2/3) end
local pos = 0 local pos = 0
local totalimagewidth, iw, ih local totalimagewidth, iw, ih
@ -526,9 +533,9 @@ doc.widgets.gallery = function(imagedata, x, y, aspect_ratio, width, rows, image
totalimagewidth = width - bw*2 totalimagewidth = width - bw*2
iw = totalimagewidth / rows iw = totalimagewidth / rows
ih = iw * aspect_ratio ih = iw * aspect_ratio
formstring = formstring .. "button["..x..","..y..";"..bw..","..ih..";doc_gallery_prev;"..F("<").."]" formstring = formstring .. "button["..x..","..y..";"..bw..","..ih..";doc_button_gallery_prev;"..F("<").."]"
local rightx = buttonoffset + (x + rows * iw) local rightx = buttonoffset + (x + rows * iw)
formstring = formstring .. "button["..rightx..","..y..";"..bw..","..ih..";doc_gallery_next;"..F(">").."]" formstring = formstring .. "button["..rightx..","..y..";"..bw..","..ih..";doc_button_gallery_next;"..F(">").."]"
buttonoffset = bw buttonoffset = bw
else else
totalimagewidth = width totalimagewidth = width
@ -543,7 +550,7 @@ doc.widgets.gallery = function(imagedata, x, y, aspect_ratio, width, rows, image
local bw, bh local bw, bh
-- TODO: Use different identifiers -- TODO: Use different identifiers
return formstring, "doc_gallery_prev", "doc_gallery_next" return formstring, "doc_button_gallery_prev", "doc_button_gallery_next"
end end
-- Direct formspec -- Direct formspec
@ -865,7 +872,7 @@ function doc.formspec_entry_navigation(category_id, entry_id)
return formstring return formstring
end end
function doc.formspec_entry(category_id, entry_id) function doc.formspec_entry(category_id, entry_id, playername)
local formstring local formstring
if category_id == nil then if category_id == nil then
formstring = "label[0,0;"..F("Help > (No Category)") .. "]" formstring = "label[0,0;"..F("Help > (No Category)") .. "]"
@ -889,7 +896,7 @@ function doc.formspec_entry(category_id, entry_id)
ename = string.format(S("Nameless entry (%s)"), entry_id) ename = string.format(S("Nameless entry (%s)"), entry_id)
end end
formstring = "label[0,0;"..minetest.formspec_escape(string.format(S("Help > %s > %s"), category.def.name, ename)).."]" formstring = "label[0,0;"..minetest.formspec_escape(string.format(S("Help > %s > %s"), category.def.name, ename)).."]"
formstring = formstring .. category.def.build_formspec(entry.data) formstring = formstring .. category.def.build_formspec(entry.data, playername)
formstring = formstring .. doc.formspec_entry_navigation(category_id, entry_id) formstring = formstring .. doc.formspec_entry_navigation(category_id, entry_id)
end end
return formstring return formstring
@ -912,7 +919,8 @@ function doc.process_form(player,formname,fields)
contents = doc.formspec_category(cid, playername) contents = doc.formspec_category(cid, playername)
subformname = "category" subformname = "category"
elseif(tab==3) then elseif(tab==3) then
contents = doc.formspec_entry(cid, eid) doc.data.players[playername].galidx = 1
contents = doc.formspec_entry(cid, eid, playername)
if cid ~= nil and eid ~= nil then if cid ~= nil and eid ~= nil then
doc.mark_entry_as_viewed(playername, cid, eid) doc.mark_entry_as_viewed(playername, cid, eid)
end end
@ -971,7 +979,8 @@ function doc.process_form(player,formname,fields)
if eids ~= nil and catsel ~= nil then if eids ~= nil and catsel ~= nil then
eid = eids[catsel] eid = eids[catsel]
end end
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid) doc.data.players[playername].galidx = 1
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername)
minetest.show_formspec(playername, "doc:entry", formspec) minetest.show_formspec(playername, "doc:entry", formspec)
doc.mark_entry_as_viewed(playername, cid, eid) doc.mark_entry_as_viewed(playername, cid, eid)
end end
@ -995,7 +1004,8 @@ function doc.process_form(player,formname,fields)
end end
doc.mark_entry_as_viewed(playername, cid, eid) doc.mark_entry_as_viewed(playername, cid, eid)
doc.data.players[playername].entry_textlist_needs_updating = true doc.data.players[playername].entry_textlist_needs_updating = true
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid) doc.data.players[playername].galidx = 1
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername)
minetest.show_formspec(playername, "doc:entry", formspec) minetest.show_formspec(playername, "doc:entry", formspec)
end end
end end
@ -1016,7 +1026,8 @@ function doc.process_form(player,formname,fields)
doc.mark_entry_as_viewed(playername, cid, new_eid) doc.mark_entry_as_viewed(playername, cid, new_eid)
doc.data.players[playername].catsel = new_catsel doc.data.players[playername].catsel = new_catsel
doc.data.players[playername].entry = new_eid doc.data.players[playername].entry = new_eid
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid) doc.data.players[playername].galidx = 1
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid, playername)
minetest.show_formspec(playername, "doc:entry", formspec) minetest.show_formspec(playername, "doc:entry", formspec)
end end
elseif fields["doc_button_goto_prev"] then elseif fields["doc_button_goto_prev"] then
@ -1029,9 +1040,23 @@ function doc.process_form(player,formname,fields)
doc.mark_entry_as_viewed(playername, cid, new_eid) doc.mark_entry_as_viewed(playername, cid, new_eid)
doc.data.players[playername].catsel = new_catsel doc.data.players[playername].catsel = new_catsel
doc.data.players[playername].entry = new_eid doc.data.players[playername].entry = new_eid
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid) doc.data.players[playername].galidx = 1
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid, playername)
minetest.show_formspec(playername, "doc:entry", formspec) minetest.show_formspec(playername, "doc:entry", formspec)
end end
elseif fields["doc_button_gallery_prev"] then
local cid, eid = doc.get_selection(playername)
doc.data.players[playername].galidx = doc.data.players[playername].galidx - 1
if doc.data.players[playername].galidx <= 0 then
doc.data.players[playername].galidx = 1
end
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername)
minetest.show_formspec(playername, "doc:entry", formspec)
elseif fields["doc_button_gallery_next"] then
local cid, eid = doc.get_selection(playername)
doc.data.players[playername].galidx = doc.data.players[playername].galidx + 1
local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername)
minetest.show_formspec(playername, "doc:entry", formspec)
end end
end end
end end
@ -1055,6 +1080,8 @@ minetest.register_on_joinplayer(function(player)
-- Initialize player data -- Initialize player data
doc.data.players[playername] = {} doc.data.players[playername] = {}
playerdata = doc.data.players[playername] playerdata = doc.data.players[playername]
-- Gallery index, stores current index of first displayed image in a gallery
playerdata.galidx = 1
-- Table for persistant data -- Table for persistant data
playerdata.stored_data = {} playerdata.stored_data = {}
-- Contains viewed entries -- Contains viewed entries