mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
86 lines
2.1 KiB
Lua
86 lines
2.1 KiB
Lua
require "keys"
|
|
|
|
Keydef = {}
|
|
Keydef.mt = {}
|
|
function Keydef.new(keycode,modifier,descr)
|
|
local keydef = {}
|
|
keydef.keycode = keycode
|
|
keydef.modifier = modifier
|
|
keydef.descr = descr
|
|
setmetatable(keydef, Keydef.mt)
|
|
return keydef
|
|
end
|
|
function Keydef.tostring(keydef)
|
|
return ((keydef.modifier and keydef.modifier.."+") or "").."["..(keydef.keycode or "").."]"..(keydef.descr or "")
|
|
end
|
|
function Keydef.concat(keydef, obj)
|
|
if getmetatable(obj)==Keydef.mt then
|
|
return tostring(keydef)..tostring(obj)
|
|
else
|
|
return tostring(keydef)..obj
|
|
end
|
|
end
|
|
Keydef.mt.__tostring=Keydef.tostring
|
|
Keydef.mt.__concat=Keydef.concat
|
|
|
|
Command = {}
|
|
Command.mt = {}
|
|
function Command.new(keydef, func, help)
|
|
local command = {}
|
|
command.keydef = keydef
|
|
command.func = func
|
|
command.help = help
|
|
setmetatable(command, Command.mt)
|
|
return command
|
|
end
|
|
function Command.tostring(command)
|
|
return command.keydef..": "..command.help
|
|
end
|
|
Command.mt.__tostring=Command.tostring
|
|
|
|
|
|
Commands = {
|
|
map = {}
|
|
}
|
|
function Commands:add(keycode,modifier,keydescr,help,func)
|
|
local keydef = Keydef.new(keycode, modifier,keydescr)
|
|
self:_add_impl(keydef,help,func)
|
|
end
|
|
function Commands:_add_impl(keydef,help,func,keygroup)
|
|
local command = self.map[keydef]
|
|
if command == nil then
|
|
command = Command.new(keydef,func,help)
|
|
self.map[keydef] = command
|
|
else
|
|
command.func = func
|
|
command.help = help
|
|
command.keygroup = keygroup
|
|
end
|
|
end
|
|
function Commands:add_group(keygroup,keys,help,func)
|
|
for _k,keydef in pairs(keys) do
|
|
self:_add_impl(keydef,help,func,keygroup)
|
|
end
|
|
end
|
|
function Commands:get(keycode,modifier)
|
|
return self.map[Keydef.new(keycode, modifier)]
|
|
end
|
|
function Commands:get_by_keydef(keydef)
|
|
return self.map[keydef]
|
|
end
|
|
function Commands:new(obj)
|
|
-- payload
|
|
local mt = {}
|
|
setmetatable(self.map,mt)
|
|
mt.__index=function (table, key)
|
|
return rawget(table,(key.modifier or "").."@#@"..(key.keycode or ""))
|
|
end
|
|
mt.__newindex=function (table, key, value)
|
|
return rawset(table,(key.modifier or "").."@#@"..(key.keycode or ""),value)
|
|
end
|
|
-- obj definition
|
|
obj = obj or {}
|
|
setmetatable(obj, self)
|
|
self.__index = self
|
|
return obj
|
|
end |