Files
aiolauncher_scripts/community/meta-widget.lua
2023-05-20 09:19:00 +04:00

167 lines
4.2 KiB
Lua

-- name = "Meta widget"
-- type = "widget"
-- author = "Andrey Gavrilov"
-- version = "1.0"
local widgets = {
"text [TEXT]",
"battery",
"notes [NUM]",
"exchange [NUM] [FROM] [TO]",
"worldclock [TIME_ZONE]",
"calendar [NUM]",
"bitcoin",
"traffic",
"alarm",
"tasks [NUM]",
"memory",
"storage",
"weather [NUM]",
"notify [NUM]",
"screen",
"dialogs [NUM]",
"player",
"health",
"space [NUM]"
}
table.sort(widgets)
function on_resume()
if not metawidget then
if not files:read("metawidget") then
metawidget = {"text Metawidget"}
redraw()
return
end
end
metawidget = load("return " .. files:read("metawidget"))()
ui:build(metawidget)
end
function on_settings()
dialog_id = "settings"
ui:show_radio_dialog("Select action", {"Add widget", "Remove widget", "Move widget", "Edit widget", "Edit metawidget"})
end
function on_dialog_action(res)
if dialog_id == "settings" then
if res == 1 then
dialog_id = "add"
ui:show_radio_dialog("Add widget", widgets)
elseif res == 2 then
dialog_id = "remove"
ui:show_radio_dialog("Remove widget", metawidget)
elseif res == 3 then
dialog_id = "move"
ui:show_radio_dialog("Move widget", metawidget)
elseif res == 4 then
dialog_id = "edit"
ui:show_radio_dialog("Edit widget", metawidget)
elseif res == 5 then
dialog_id = "metaedit"
ui:show_rich_editor({text = "{\n\"" .. table.concat(metawidget, "\",\n\"") .. "\",\n}", new = true})
else
dialog_id = ""
end
elseif dialog_id == "add" then
dialog_id = ""
if res ~= -1 then
add_widget(res)
end
elseif dialog_id == "remove" then
dialog_id = ""
if res ~= -1 then
remove_widget(res)
end
elseif dialog_id == "move" then
if res == -1 then
dialog_id = ""
else
dialog_id = "move_line"
pos = res
ui:show_radio_dialog("Remove widget", {"Up", "Down"})
end
elseif dialog_id == "edit" then
if res == -1 then
dialog_id = ""
else
dialog_id = "edit_line"
pos = res
ui:show_edit_dialog("Edit widget", "", metawidget[res])
end
elseif dialog_id == "metaedit" then
dialog_id = ""
if res ~= -1 then
metawidget = load("return " .. res.text)()
redraw()
end
elseif dialog_id == "add_line" then
dialog_id = ""
if (res ~= -1) and (res ~= "") then
table.insert(metawidget, res)
redraw()
end
elseif dialog_id == "move_line" then
dialog_id = ""
if res ~= -1 then
move_widget(res)
end
elseif dialog_id == "edit_line" then
dialog_id = ""
if res ~= -1 then
if res == "" then
remove_widget(pos)
else
metawidget[pos] = res
redraw()
end
end
else
return
end
end
function add_widget(res)
local lines = widgets[res]:split(" ")
local line = lines[1]
if line == widgets[res] then
table.insert(metawidget, line)
redraw()
else
dialog_id = "add_line"
ui:show_edit_dialog("Enter parameters" .. widgets[res]:replace(line, ""), widgets[res], line .. " ")
end
end
function remove_widget(res)
table.remove(metawidget, res)
redraw()
end
function move_widget(res)
if res == 1 then
if pos == 1 then
return
else
local line = metawidget[pos]
metawidget[pos] = metawidget[pos - 1]
metawidget[pos - 1] = line
end
else
if pos == #metawidget then
return
else
local line = metawidget[pos]
metawidget[pos] = metawidget[pos + 1]
metawidget[pos + 1] = line
end
end
redraw()
end
function redraw()
files:write("metawidget", "{\n\"" .. table.concat(metawidget, "\",\n\"") .. "\",\n}")
on_resume()
end