files
ltui/src/ltui/event.lua
2020-10-05 23:30:13 -03:00

95 lines
2.8 KiB
Lua

--!A cross-platform terminal ui library based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-2020, TBOOX Open Source Group.
--
-- @author ruki
-- @file event.lua
--
--[[ Console User Interface (cui) ]-----------------------------------------
Author: Tiago Dionizio (tiago.dionizio AT gmail.com)
$Id: event.lua 18 2007-06-21 20:43:52Z tngd $
--------------------------------------------------------------------------]]
-- load modules
local log = require("ltui/base/log")
local object = require("ltui/object")
-- define module
local event = event or object { _init = {"type", "command", "extra"} }
-- register event types
function event:register(tag, ...)
local base = self[tag] or 0
local enums = {...}
local n = #enums
for i = 1, n do
self[enums[i]] = i + base
end
self[tag] = base + n
end
-- is key?
function event:is_key(key_name)
return self.type == event.ev_keyboard and self.key_name == key_name
end
-- is command event: cm_xxx?
function event:is_command(command)
return self.type == event.ev_command and self.command == command
end
-- dump event
function event:dump()
if self.type == event.ev_keyboard then
log:print("event(key): %s %s ..", self.key_name, self.key_code)
elseif self.type == event.ev_command then
log:print("event(cmd): %s ..", self.command)
else
log:print("event(%s): ..", self.type)
end
end
-- register event types, event.ev_keyboard = 1, event.ev_mouse = 2, ... , event.ev_idle = 5, event.ev_max = 5
event:register("ev_max", "ev_keyboard", "ev_mouse", "ev_command", "ev_text", "ev_idle")
-- register command event types (ev_command)
event:register("cm_max", "cm_quit", "cm_exit", "cm_enter")
-- define keyboard event
--
-- keyname = key name
-- keycode = key code
-- keymeta = ALT key was pressed
--
event.keyboard = object {_init = { "key_code", "key_name", "key_meta" }, type = event.ev_keyboard}
-- define mouse event
--
-- btn_name = button number and event type
-- btn_code = mouse event code
-- x, y = coordinates
--
event.mouse = object {_init = { "btn_code", "x", "y", "btn_name" }, type = event.ev_mouse}
-- define command event
event.command = object {_init = { "command", "extra" }, type = event.ev_command}
-- define idle event
event.idle = object {_init = {}, type = event.ev_idle}
-- return module
return event