75 lines
1.8 KiB
Lua
75 lines
1.8 KiB
Lua
-- confirm plugin options
|
|
--[[=begin
|
|
|
|
gui/confirm-opts
|
|
================
|
|
A basic configuration interface for the `confirm` plugin.
|
|
|
|
=end]]
|
|
|
|
|
|
confirm = require 'plugins.confirm'
|
|
gui = require 'gui'
|
|
|
|
Opts = defclass(Opts, gui.FramedScreen)
|
|
Opts.ATTRS = {
|
|
frame_style = gui.GREY_LINE_FRAME,
|
|
frame_title = 'Confirmation dialogs',
|
|
frame_width = 32,
|
|
frame_height = 20,
|
|
frame_inset = 1,
|
|
focus_path = 'confirm/opts',
|
|
}
|
|
|
|
function Opts:init()
|
|
self:refresh()
|
|
self.cursor = 1
|
|
local active_id = confirm.get_active_id()
|
|
for i, c in pairs(self.data) do
|
|
if c.id == active_id then
|
|
self.cursor = i
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function Opts:refresh()
|
|
self.data = confirm.get_conf_data()
|
|
self.frame_height = #self.data
|
|
end
|
|
|
|
function Opts:onRenderBody(p)
|
|
for i, c in pairs(self.data) do
|
|
local highlight = (i == self.cursor and 8 or 0)
|
|
p:pen(COLOR_GREY + highlight)
|
|
p:string(c.id .. ': ')
|
|
p:pen((c.enabled and COLOR_GREEN or COLOR_RED) + highlight)
|
|
p:string(c.enabled and 'Enabled' or 'Disabled')
|
|
p:newline()
|
|
end
|
|
end
|
|
|
|
function Opts:onInput(keys)
|
|
local conf = self.data[self.cursor]
|
|
if keys.LEAVESCREEN then
|
|
self:dismiss()
|
|
elseif keys.SELECT then
|
|
confirm.set_conf_state(conf.id, not conf.enabled)
|
|
self:refresh()
|
|
elseif keys.SEC_SELECT then
|
|
for _, c in pairs(self.data) do
|
|
confirm.set_conf_state(c.id, not conf.enabled)
|
|
end
|
|
self:refresh()
|
|
elseif keys.STANDARDSCROLL_UP or keys.STANDARDSCROLL_DOWN then
|
|
self.cursor = self.cursor + (keys.STANDARDSCROLL_UP and -1 or 1)
|
|
if self.cursor < 1 then
|
|
self.cursor = #self.data
|
|
elseif self.cursor > #self.data then
|
|
self.cursor = 1
|
|
end
|
|
end
|
|
end
|
|
|
|
Opts():show()
|