mesecraft/mods_disabled/laptop/apps/stickynote_app.lua

83 lines
2.9 KiB
Lua

local store_area = 'stickynote:files'
laptop.register_app("stickynote", {
app_name = "Notepad",
app_icon = "laptop_notes_pad.png",
app_info = "Write Text Documents",
formspec_func = function(app, mtos)
local data = mtos.bdev:get_app_storage('system', 'stickynote')
data.files = data.files or {}
data.text = data.text or ""
if data.selected_disk_name and data.selected_file_name then
app.app_info = app.app_info..' - Open File: '..data.selected_disk_name..' / '..data.selected_file_name
end
-- cache sorted files list
if not data.fileslist_sorted then
data.fileslist_sorted = {}
for filename,_ in pairs(data.files) do
table.insert(data.fileslist_sorted, filename)
end
table.sort(data.fileslist_sorted)
end
local formspec = "background[0,1.35;15.2,8.35;"..mtos.theme.contrast_background.."]"..
"textarea[0.35,1.35;15.08,9.5;text;;"..minetest.formspec_escape(data.text).."]"..
mtos.theme:get_button('0,0.5;1.5,0.8', 'minor', 'clear', 'New', 'New file')..
mtos.theme:get_button('2,0.5;1.5,0.8', 'minor', 'load', 'Load', 'Load file')..
mtos.theme:get_button('4,0.5;1.5,0.8', 'minor', 'save', 'Save', 'Save file')..
mtos.theme:get_button('8,0.5;1.5,0.8', 'minor', 'print', 'Print', 'Print file')
return formspec
end,
receive_fields_func = function(app, mtos, sender, fields)
local data = mtos.bdev:get_app_storage('system', 'stickynote')
if fields.text then
data.text = fields.text
end
if fields.load then
mtos:select_file_dialog({
mode = 'open',
allowed_disks = {'hdd', 'removable'},
selected_disk_name = data.selected_disk_name,
selected_file_name = data.selected_file_name,
store_name = store_area,
prefix = 'open_',
})
elseif fields.open_selected_disk and fields.open_selected_file then
data.selected_disk_name = fields.open_selected_disk
data.selected_file_name = fields.open_selected_file
local store = mtos.bdev:get_app_storage(data.selected_disk_name, store_area)
if store then
data.text = store[data.selected_file_name].content
end
elseif fields.save then
mtos:select_file_dialog({
mode = 'save',
allowed_disks = {'hdd', 'removable'},
selected_disk_name = data.selected_disk_name,
selected_file_name = data.selected_file_name,
store_name = store_area,
prefix = 'save_',
})
elseif fields.save_selected_disk and fields.save_selected_file then
data.selected_disk_name = fields.save_selected_disk
data.selected_file_name = fields.save_selected_file
local store = mtos.bdev:get_app_storage(data.selected_disk_name, store_area)
if store then
store[data.selected_file_name] = { content = data.text, ctime = os.time(), owner = sender:get_player_name() }
end
elseif fields.clear then
data.selected_disk_name = nil
data.selected_file_name = nil
data.text = ""
elseif fields.print then
mtos:print_file_dialog({
label = data.selected_file_name,
text = data.text,
})
end
end
})