Add meta widget script
This commit is contained in:
166
community/meta-widget.lua
Normal file
166
community/meta-widget.lua
Normal file
@@ -0,0 +1,166 @@
|
||||
-- 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
|
||||
Reference in New Issue
Block a user