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",
"sfinv",
"vector",
table={fields={"copy"}},
}

View File

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

54
gui.lua
View File

@ -42,15 +42,22 @@ sfinv.register_page("edu", {
fs[#fs + 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
fs[#fs + 1] = ",," .. col.title
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] = minetest.formspec_escape(student)
if student == context.selected_student then
selection_id = tostring(i + 1)
end
for _, col in pairs(infos) do
local color, value
if col.type == "priv" then
@ -65,7 +72,10 @@ sfinv.register_page("edu", {
fs[#fs + 1] = minetest.formspec_escape(value)
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] = "box[-0.25,-0.3;3.1,1.15;#666]"
@ -86,7 +96,7 @@ sfinv.register_page("edu", {
else
fs[#fs + 1] = "button[0.9,0;1,1;select_group;Group]"
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] = "label[1.85,0.25;Selected]"
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)
end,
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
if fields["action_" .. aname] then
local selector
@ -138,7 +172,7 @@ sfinv.register_page("edu", {
elseif context.select_toggle == "group" then
selector = "group:" .. context.groupname
elseif context.select_toggle == "selected" then
error("Unimplemented")
selector = "user:" .. context.selected_student
else
error("Unknown selector")
end
@ -149,15 +183,5 @@ sfinv.register_page("edu", {
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,
})