98 lines
3.2 KiB
Lua
98 lines
3.2 KiB
Lua
local CustomEvents = {
|
|
classname = "FNCustomEvents",
|
|
}
|
|
|
|
event_list = {}
|
|
|
|
function CustomEvents.add_custom_event(gui_name, gui_type, event_name, func)
|
|
Debug:debug(CustomEvents.classname, "CustomEvents.add_custom_event(", gui_name, gui_type, event_name, func, ")")
|
|
if not gui_name or not event_name or not gui_type then
|
|
out("Error in CustomEvents.add_custom_event: input == nil")
|
|
return
|
|
end
|
|
|
|
if not CustomEvents.event_exists(gui_name, gui_type, event_name) then
|
|
if not event_list[gui_name] then
|
|
event_list[gui_name] = {}
|
|
end
|
|
if not event_list[gui_name][gui_type] then
|
|
event_list[gui_name][gui_type] = {}
|
|
end
|
|
event_list[gui_name][gui_type][event_name] = {}
|
|
end
|
|
if type(func) == "function" then
|
|
table.insert(event_list[gui_name][gui_type][event_name], func)
|
|
elseif type(func) == "table" then
|
|
for _,fun in pairs(func) do
|
|
table.insert(event_list[gui_name][gui_type][event_name], fun)
|
|
end
|
|
end
|
|
end
|
|
|
|
function CustomEvents.del_custom_event(gui_name, gui_type, event_name)
|
|
Debug:debug(CustomEvents.classname, "CustomEvents.del_custom_event(", gui_name, gui_type, event_name, ")")
|
|
if not gui_name or not event_name or not gui_type then
|
|
out("Error in CustomEvents.del_custom_event: input == nil")
|
|
return
|
|
end
|
|
if CustomEvents.event_exists(gui_name, gui_type, event_name) then
|
|
event_list[gui_name][gui_type][event_name] = nil
|
|
else
|
|
out("Error CustomEvents.del_custom_event: Event not found")
|
|
end
|
|
end
|
|
|
|
function CustomEvents.event_exists(gui_name, gui_type, event_name)
|
|
Debug:debug(CustomEvents.classname, "CustomEvents.event_exists(", gui_name, gui_type, event_name, ")")
|
|
if event_list[gui_name] and
|
|
event_list[gui_name][gui_type] and
|
|
event_list[gui_name][gui_type][event_name] then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function CustomEvents.invoke(gui_name, gui_type, event_name, event, split_strings)
|
|
Debug:debug(CustomEvents.classname, "CustomEvents.invoke(", gui_name, gui_type, event_name, event, ")")
|
|
if not gui_name or not event_name or not event then
|
|
out("Error in CustomEvents.invoke: input == nil")
|
|
return
|
|
end
|
|
if CustomEvents.event_exists(gui_name, gui_type, event_name) then
|
|
local events = event_list[gui_name][gui_type][event_name]
|
|
for _,cur_event in pairs(events) do
|
|
local ok , err = pcall(function()
|
|
cur_event(event, event_name, split_strings)
|
|
end)
|
|
|
|
if not(ok) then
|
|
Debug:error(CustomEvents.classname, "FNEI: event ", gui_name, gui_type, event_name, " return error!")
|
|
Debug:error(CustomEvents.classname, err)
|
|
|
|
Gui.refresh_fnei_gui()
|
|
end
|
|
end
|
|
else
|
|
out("Error CustomEvents.invoke: event not found ", event, event.element.name, gui_name, gui_type, event_name)
|
|
end
|
|
end
|
|
|
|
function CustomEvents.remove_gui_events(gui_name)
|
|
Debug:debug(CustomEvents.classname, "CustomEvents.remove_gui_events(", gui_name, ")")
|
|
event_list[gui_name] = nil
|
|
end
|
|
|
|
function CustomEvents.debug()
|
|
for a,gui_name in pairs(event_list) do
|
|
for b,gui_type in pairs(gui_name) do
|
|
for c,gui_event in pairs(gui_type) do
|
|
for d,event in pairs(gui_event) do
|
|
out(a, b, c, d)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return CustomEvents
|