Add ability to select students

master
rubenwardy 2019-07-10 05:04:20 +01:00
parent d2cecfa738
commit d74174f5dd
3 changed files with 43 additions and 16 deletions

View File

@ -9,4 +9,5 @@ read_globals = {
"minetest", "minetest",
"sfinv", "sfinv",
"vector", "vector",
table={fields={"copy"}},
} }

View File

@ -62,8 +62,10 @@ function classroom.get_students_by_selector(selector)
return classroom.get_students() return classroom.get_students()
elseif selector:sub(1, 6) == "group:" then elseif selector:sub(1, 6) == "group:" then
return classroom.get_group_students(selector:sub(7)) return classroom.get_group_students(selector:sub(7))
elseif selector:sub(1, 5) == "user:" then
return { selector:sub(6) }
else else
return { selector } return {}
end end
end end

54
gui.lua
View File

@ -42,15 +42,22 @@ sfinv.register_page("edu", {
fs[#fs + 1] = "]" fs[#fs + 1] = "]"
fs[#fs + 1] = "tabheader[0.3,1.1;group;All,Group 1;1]" fs[#fs + 1] = "tabheader[0.3,1.1;group;All,Group 1;1]"
fs[#fs + 1] = "table[0,0.8;5,8;kids;,Name" fs[#fs + 1] = "table[0,0.8;5,8;students;,Name"
for _, col in pairs(infos) do for _, col in pairs(infos) do
fs[#fs + 1] = ",," .. col.title fs[#fs + 1] = ",," .. col.title
end end
for _, student in pairs(get_group(context)) do local students = get_group(context)
local selection_id = ""
context.students = table.copy(students)
for i, student in pairs(students) do
fs[#fs + 1] = ",," fs[#fs + 1] = ",,"
fs[#fs + 1] = minetest.formspec_escape(student) fs[#fs + 1] = minetest.formspec_escape(student)
if student == context.selected_student then
selection_id = tostring(i + 1)
end
for _, col in pairs(infos) do for _, col in pairs(infos) do
local color, value local color, value
if col.type == "priv" then if col.type == "priv" then
@ -65,7 +72,10 @@ sfinv.register_page("edu", {
fs[#fs + 1] = minetest.formspec_escape(value) fs[#fs + 1] = minetest.formspec_escape(value)
end end
end end
fs[#fs + 1] = ";2]"
fs[#fs + 1] = ";"
fs[#fs + 1] = selection_id
fs[#fs + 1] = "]"
fs[#fs + 1] = "container[5.25,1.1]" fs[#fs + 1] = "container[5.25,1.1]"
fs[#fs + 1] = "box[-0.25,-0.3;3.1,1.15;#666]" fs[#fs + 1] = "box[-0.25,-0.3;3.1,1.15;#666]"
@ -86,7 +96,7 @@ sfinv.register_page("edu", {
else else
fs[#fs + 1] = "button[0.9,0;1,1;select_group;Group]" fs[#fs + 1] = "button[0.9,0;1,1;select_group;Group]"
end end
if not context.selected then if not context.selected_student then
fs[#fs + 1] = "box[1.8,0.1;0.8,0.7;#333]" fs[#fs + 1] = "box[1.8,0.1;0.8,0.7;#333]"
fs[#fs + 1] = "label[1.85,0.25;Selected]" fs[#fs + 1] = "label[1.85,0.25;Selected]"
fs[#fs + 1] = "tooltip[1.8,0;1,1;Please select a student first]" fs[#fs + 1] = "tooltip[1.8,0;1,1;Please select a student first]"
@ -130,6 +140,30 @@ sfinv.register_page("edu", {
return sfinv.make_formspec(player, context, table.concat(fs, ""), false) return sfinv.make_formspec(player, context, table.concat(fs, ""), false)
end, end,
on_player_receive_fields = function(self, player, context, fields) on_player_receive_fields = function(self, player, context, fields)
if fields.students then
local evt = minetest.explode_table_event(fields.students)
local i = (evt.row or 0) - 1
if evt.type == "CHG" and i >= 1 and i <= #context.students then
context.selected_student = context.students[i]
sfinv.set_player_inventory_formspec(player)
return true
end
end
if fields.select_all then
context.select_toggle = "all"
sfinv.set_player_inventory_formspec(player)
return true
elseif fields.select_group then
context.select_toggle = "group"
sfinv.set_player_inventory_formspec(player)
return true
elseif fields.select_selected then
context.select_toggle = "selected"
sfinv.set_player_inventory_formspec(player)
return true
end
for aname, action in pairs(classroom.get_actions()) do for aname, action in pairs(classroom.get_actions()) do
if fields["action_" .. aname] then if fields["action_" .. aname] then
local selector local selector
@ -138,7 +172,7 @@ sfinv.register_page("edu", {
elseif context.select_toggle == "group" then elseif context.select_toggle == "group" then
selector = "group:" .. context.groupname selector = "group:" .. context.groupname
elseif context.select_toggle == "selected" then elseif context.select_toggle == "selected" then
error("Unimplemented") selector = "user:" .. context.selected_student
else else
error("Unknown selector") error("Unknown selector")
end end
@ -149,15 +183,5 @@ sfinv.register_page("edu", {
end end
end end
if fields.select_all then
context.select_toggle = "all"
sfinv.set_player_inventory_formspec(player)
elseif fields.select_group then
context.select_toggle = "group"
sfinv.set_player_inventory_formspec(player)
elseif fields.select_selected then
context.select_toggle = "selected"
sfinv.set_player_inventory_formspec(player)
end
end, end,
}) })