laptop/apps/stickynote_app.lua
Alexander Weber 20819fc6ed stickynote enhanced to load/save data
load/save dialog as a part of system
2017-12-16 12:54:49 +01:00

77 lines
2.7 KiB
Lua

local store_area = 'stickynote:files'
laptop.register_app("stickynote", {
app_name = "Notepad",
app_icon = "laptop_notes_pad.png",
app_info = "Write notes in a text document",
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_bg.."]"..
"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')
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 = ""
end
end
})