From d74174f5dd4c3dc0b9c85800fc699ccca58d5465 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Wed, 10 Jul 2019 05:04:20 +0100 Subject: [PATCH] Add ability to select students --- .luacheckrc | 1 + api.lua | 4 +++- gui.lua | 54 ++++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/.luacheckrc b/.luacheckrc index 37bc099..8388483 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -9,4 +9,5 @@ read_globals = { "minetest", "sfinv", "vector", + table={fields={"copy"}}, } diff --git a/api.lua b/api.lua index 38a2ed0..1f05e4b 100644 --- a/api.lua +++ b/api.lua @@ -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 diff --git a/gui.lua b/gui.lua index 6027022..2f9237f 100644 --- a/gui.lua +++ b/gui.lua @@ -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, })