Загрузить файлы в «ui»
This commit is contained in:
parent
770ff82583
commit
9058805f8d
264
ui/settings.lua
Normal file
264
ui/settings.lua
Normal file
@ -0,0 +1,264 @@
|
||||
-- translation
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:settings"
|
||||
|
||||
local function get_settings_groups(parent)
|
||||
-- generate ordered list of settings
|
||||
local groups = {}
|
||||
for _, g in ipairs(mail.settings_groups) do
|
||||
if (g.parent or 0) == parent then
|
||||
table.insert(groups, g)
|
||||
-- insert sub groups just after the parent group
|
||||
table.insert_all(groups, get_settings_groups(g.name))
|
||||
end
|
||||
end
|
||||
return groups
|
||||
end
|
||||
|
||||
local groups_labels = {}
|
||||
local ordered_groups = get_settings_groups(0)
|
||||
local tree_indent = 0
|
||||
for i, g in ipairs(ordered_groups) do
|
||||
if not g.parent then tree_indent = 0
|
||||
elseif i > 1 and g.parent == ordered_groups[i-1].name then tree_indent = tree_indent + 1
|
||||
elseif i > 1 and g.parent ~= ordered_groups[i-1].parent then tree_indent = tree_indent - 1
|
||||
end
|
||||
table.insert(groups_labels, tostring(tree_indent))
|
||||
table.insert(groups_labels, g.label)
|
||||
end
|
||||
local groups_str = table.concat(groups_labels, ",")
|
||||
|
||||
function mail.show_settings(name)
|
||||
local group_index = 1
|
||||
mail.selected_idxs.settings_group[name] = mail.selected_idxs.settings_group[name] or mail.settings_groups[1].name
|
||||
|
||||
for i, g in ipairs(ordered_groups) do
|
||||
if g.name == mail.selected_idxs.settings_group[name] then
|
||||
group_index = i
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local formspec = [[
|
||||
size[10,6;]
|
||||
tabheader[0,0;optionstab;]] .. S("Settings") .. "," .. S("About") .. [[;1;false;false]
|
||||
button[9.35,0;0.75,0.5;back;X]
|
||||
|
||||
tablecolumns[tree;text]
|
||||
table[0,0.775;3,4.5;groups;]] .. groups_str .. [[;]] .. group_index .. [[]
|
||||
|
||||
box[0,0;3,0.45;]] .. mail.get_color("highlighted") .. [[]
|
||||
label[0.2,0;]] .. mail.settings_groups[group_index].label .. [[]
|
||||
|
||||
button[0,5.65;2.5,0.5;reset;]] .. S("Reset") .. [[]
|
||||
button[7.5,5.65;2.5,0.5;save;]] .. S("Save") .. [[]
|
||||
]]
|
||||
|
||||
local x = 3.5
|
||||
local y = -0.7
|
||||
-- put settings in order
|
||||
local ordered_settings = {}
|
||||
for setting, data in pairs(mail.settings) do
|
||||
if data.group == mail.selected_idxs.settings_group[name] then
|
||||
table.insert(ordered_settings, setting)
|
||||
end
|
||||
end
|
||||
table.sort(ordered_settings, function(a, b) return mail.settings[a].index < mail.settings[b].index end)
|
||||
for _, setting in pairs(ordered_settings) do
|
||||
local data = mail.settings[setting]
|
||||
y = y + 0.4
|
||||
local field_default = mail.selected_idxs[setting][name]
|
||||
if field_default == nil then field_default = mail.get_setting(name, setting) end
|
||||
if data.type == "bool" then
|
||||
formspec = formspec .. [[
|
||||
checkbox[]] .. x .. "," .. y .. ";" .. setting .. ";" ..
|
||||
data.label .. ";" .. tostring(field_default) .. [[]
|
||||
]]
|
||||
if data.tooltip then
|
||||
formspec = formspec .. [[
|
||||
tooltip[]] .. setting .. ";" .. data.tooltip .. [[]
|
||||
]]
|
||||
end
|
||||
elseif data.type == "string" then
|
||||
y = y + 1
|
||||
formspec = formspec .. [[
|
||||
field[]] .. x+0.275 .. "," .. y .. ";3,0.5;" .. setting .. ";" .. data.label .. [[;]] ..
|
||||
field_default .. [[]
|
||||
]]
|
||||
if data.tooltip then
|
||||
formspec = formspec .. "tooltip[" .. setting .. ";" .. data.tooltip .. "]"
|
||||
end
|
||||
if data.dataset then
|
||||
local formatted_dataset = table.copy(data.dataset)
|
||||
if data.format then
|
||||
for i, d in ipairs(formatted_dataset) do
|
||||
formatted_dataset[i] = data.format(d)
|
||||
end
|
||||
end
|
||||
local dataset_str = table.concat(formatted_dataset, ",")
|
||||
local dataset_selected_id = 1
|
||||
for i, d in ipairs(data.dataset) do
|
||||
if d == field_default then
|
||||
dataset_selected_id = i
|
||||
break
|
||||
end
|
||||
end
|
||||
formspec = formspec .. [[
|
||||
dropdown[]] .. x+3 .. "," .. y-0.45 .. ";3,0.5;" .. "dataset_" .. setting .. ";" ..
|
||||
dataset_str .. [[;]] .. dataset_selected_id .. [[;true]
|
||||
]]
|
||||
end
|
||||
elseif data.type == "number" then
|
||||
y = y + 1
|
||||
formspec = formspec .. [[
|
||||
field[]] .. x+0.275 .. "," .. y .. ";3,0.5;" .. setting .. ";" .. data.label .. [[;]] ..
|
||||
tostring(field_default) .. [[]
|
||||
]]
|
||||
if data.tooltip then
|
||||
formspec = formspec .. "tooltip[" .. setting .. ";" .. data.tooltip .. "]"
|
||||
end
|
||||
if data.dataset then
|
||||
local formatted_dataset = table.copy(data.dataset)
|
||||
if data.format then
|
||||
for i, d in ipairs(formatted_dataset) do
|
||||
formatted_dataset[i] = data.format(d)
|
||||
end
|
||||
end
|
||||
local dataset_str = table.concat(formatted_dataset, ",")
|
||||
local dataset_selected_id = 1
|
||||
for i, d in ipairs(data.dataset) do
|
||||
if d == field_default then
|
||||
dataset_selected_id = i
|
||||
break
|
||||
end
|
||||
end
|
||||
formspec = formspec .. [[
|
||||
dropdown[]] .. x+3 .. "," .. y-0.45 .. ";3,0.5;" .. "dataset_" .. setting .. ";" ..
|
||||
dataset_str .. [[;]] .. dataset_selected_id .. [[;true]
|
||||
]]
|
||||
end
|
||||
elseif data.type == "index" then
|
||||
y = y + 0.2
|
||||
local formatted_dataset = table.copy(data.dataset)
|
||||
if data.format then
|
||||
for i, d in ipairs(formatted_dataset) do
|
||||
formatted_dataset[i] = data.format(d)
|
||||
end
|
||||
end
|
||||
local dataset_str = table.concat(formatted_dataset, ",")
|
||||
local dataset_selected_id = field_default
|
||||
formspec = formspec .. [[
|
||||
label[]] .. x .. "," .. y .. ";" .. data.label .. "]"
|
||||
y = y + 0.4
|
||||
formspec = formspec .. [[
|
||||
dropdown[]] .. x .. "," .. y .. ";3,0.5;" .. setting .. ";" ..
|
||||
dataset_str .. [[;]] .. dataset_selected_id .. [[;true]
|
||||
]]
|
||||
if data.tooltip then
|
||||
formspec = formspec .. [[
|
||||
tooltip[]] .. setting .. ";" .. data.tooltip .. [[]
|
||||
]]
|
||||
end
|
||||
y = y + 0.2
|
||||
elseif data.type == "list" then
|
||||
y = y + 0.3
|
||||
formspec = formspec .. [[
|
||||
tablecolumns[color;text]
|
||||
table[]] .. x-0.0125 .. "," .. y .. ";3.8125,2.5;" .. setting .. ";" ..
|
||||
mail.get_color("header") .. "," .. data.label .. ",," ..
|
||||
table.concat(field_default, ",,") .. "]"
|
||||
|
||||
y = y + 3.1
|
||||
formspec = formspec .. [[
|
||||
field[]] .. x+0.275 .. "," .. y .. ";2.975,0.5;field_" .. setting .. [[;;]
|
||||
button[]] .. x+2.75 .. "," .. y-0.325 .. ";0.75,0.5;add_" .. setting .. [[;+]
|
||||
button[]] .. x+3.25 .. "," .. y-0.325 .. ";0.75,0.5;remove_" .. setting .. [[;-]
|
||||
]]
|
||||
|
||||
if data.tooltip then
|
||||
formspec = formspec .. "tooltip[field_" .. setting .. ";" .. data.tooltip .. "]"
|
||||
end
|
||||
|
||||
y = y - 0.4
|
||||
end
|
||||
end
|
||||
formspec = formspec .. mail.theme
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
||||
local playername = player:get_player_name()
|
||||
|
||||
for setting, data in pairs(mail.settings) do
|
||||
if fields[setting] or fields["add_" .. setting] or fields["remove_" .. setting] then
|
||||
if data.type == "bool" then
|
||||
mail.selected_idxs[setting][playername] = fields[setting] == "true"
|
||||
break
|
||||
elseif data.type == "string" then
|
||||
if data.dataset and fields["dataset_" .. setting] then
|
||||
mail.selected_idxs[setting][playername] = data.dataset[tonumber(fields["dataset_" .. setting])]
|
||||
mail.show_settings(playername)
|
||||
end
|
||||
elseif data.type == "number" then
|
||||
if data.dataset and fields["dataset_" .. setting] then
|
||||
mail.selected_idxs[setting][playername] = data.dataset[tonumber(fields["dataset_" .. setting])]
|
||||
mail.show_settings(playername)
|
||||
end
|
||||
elseif data.type == "index" then
|
||||
mail.selected_idxs[setting][playername] = tonumber(fields[setting])
|
||||
elseif data.type == "list" then
|
||||
mail.selected_idxs[setting][playername] = mail.selected_idxs[setting][playername] or
|
||||
mail.get_setting(playername, setting)
|
||||
if fields[setting] then
|
||||
local evt = minetest.explode_table_event(fields[setting])
|
||||
mail.selected_idxs["index_" .. setting][playername] = evt.row-1
|
||||
elseif fields["add_" .. setting] then
|
||||
table.insert(mail.selected_idxs[setting][playername], fields["field_" .. setting])
|
||||
elseif fields["remove_" .. setting] and mail.selected_idxs["index_" .. setting][playername] then
|
||||
table.remove(mail.selected_idxs[setting][playername],
|
||||
mail.selected_idxs["index_" .. setting][playername])
|
||||
end
|
||||
mail.show_settings(playername)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if fields.back then
|
||||
mail.show_mail_menu(playername)
|
||||
return
|
||||
|
||||
elseif fields.groups then
|
||||
local evt = minetest.explode_table_event(fields.groups)
|
||||
mail.selected_idxs.settings_group[playername] = mail.settings_groups[tonumber(evt.row)].name
|
||||
mail.show_settings(playername)
|
||||
elseif fields.optionstab == "1" then
|
||||
mail.selected_idxs.optionstab[playername] = 1
|
||||
|
||||
elseif fields.optionstab == "2" then
|
||||
mail.selected_idxs.optionstab[playername] = 2
|
||||
mail.show_about(playername)
|
||||
return
|
||||
|
||||
elseif fields.save then
|
||||
-- save settings
|
||||
for setting, _ in pairs(mail.settings) do
|
||||
local new_value = mail.selected_idxs[setting][playername]
|
||||
mail.selected_idxs[setting][playername] = nil
|
||||
if new_value == nil then new_value = mail.get_setting(playername, setting) end
|
||||
mail.set_setting(playername, setting, new_value)
|
||||
end
|
||||
-- update visuals
|
||||
mail.hud_update(playername, mail.get_storage_entry(playername).inbox)
|
||||
mail.show_settings(playername)
|
||||
|
||||
elseif fields.reset then
|
||||
mail.reset_settings(playername)
|
||||
mail.show_settings(playername)
|
||||
end
|
||||
return
|
||||
end)
|
53
ui/trash.lua
Normal file
53
ui/trash.lua
Normal file
@ -0,0 +1,53 @@
|
||||
-- translation
|
||||
local S = mail.S
|
||||
|
||||
local trash_formspec = "size[8.5,11;]" .. mail.theme .. [[
|
||||
tabheader[0.3,1;boxtab;]] ..
|
||||
S("Inbox") .. "," .. S("Outbox").. "," .. S("Drafts") .. "," .. S("Trash") .. [[;4;false;false]
|
||||
|
||||
button[6,0.10;2.5,0.5;new;]] .. S("New") .. [[]
|
||||
button[6,0.95;2.5,0.5;read;]] .. S("Read") .. [[]
|
||||
button[6,1.70;2.5,0.5;restore;]] .. S("Restore") .. [[]
|
||||
button[6,2.45;2.5,0.5;delete;]] .. S("Delete") .. [[]
|
||||
button[6,3.20;2.5,0.5;empty;]] .. S("Empty") .. [[]
|
||||
button[6,8.0;2.5,0.5;contacts;]] .. S("Contacts") .. [[]
|
||||
button[6,8.8;2.5,0.5;maillists;]] .. S("Mail lists") .. [[]
|
||||
button[6,9.7;2.5,0.5;options;]] .. S("Options") .. [[]
|
||||
button_exit[6,10.5;2.5,0.5;quit;]] .. S("Close") .. [[]
|
||||
|
||||
tablecolumns[color;text;text]
|
||||
table[0,0.7;5.75,10.35;trash;]] .. mail.get_color("header") .. "," .. S("From/To") .. "," .. S("Subject")
|
||||
|
||||
|
||||
function mail.show_trash(name)
|
||||
local formspec = { trash_formspec }
|
||||
local entry = mail.get_storage_entry(name)
|
||||
local messages = entry.trash
|
||||
|
||||
if messages[1] then
|
||||
for _, message in ipairs(messages) do
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.to)
|
||||
formspec[#formspec + 1] = ","
|
||||
if message.subject ~= "" then
|
||||
if string.len(message.subject) > 30 then
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = "..."
|
||||
else
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.subject)
|
||||
end
|
||||
else
|
||||
formspec[#formspec + 1] = S("(No subject)")
|
||||
end
|
||||
end
|
||||
if mail.selected_idxs.trash[name] then
|
||||
formspec[#formspec + 1] = ";"
|
||||
formspec[#formspec + 1] = tostring(mail.selected_idxs.trash[name] + 1)
|
||||
end
|
||||
formspec[#formspec + 1] = "]"
|
||||
else
|
||||
formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("Trash is empty") .. "]"
|
||||
end
|
||||
minetest.show_formspec(name, "mail:trash", table.concat(formspec, ""))
|
||||
end
|
Loading…
Reference in New Issue
Block a user