add events.reset

This commit is contained in:
MihailRis 2024-11-01 17:18:12 +03:00
parent ac6084f904
commit e762cf9b23
4 changed files with 22 additions and 1 deletions

View File

@ -145,6 +145,12 @@ events.on(code: str, handler: function)
Adds an event handler by its code, not limited to the standard ones. Adds an event handler by its code, not limited to the standard ones.
```lua
events.reset(code: str, [optional] handler: function)
```
Removes the event, adding a handler if specified.
```lua ```lua
events.emit(code: str, args...) -> bool events.emit(code: str, args...) -> bool
``` ```

View File

@ -144,6 +144,12 @@ events.on(code: str, handler: function)
Добавляет обработчик события по его коду, не ограничиваясь стандартными. Добавляет обработчик события по его коду, не ограничиваясь стандартными.
```lua
events.reset(code: str, [опционально] handler: function)
```
Удаляет событие, добавляя обработчик, если указан.
```lua ```lua
events.emit(code: str, args...) -> bool events.emit(code: str, args...) -> bool
``` ```

View File

@ -23,6 +23,14 @@ function events.on(event, func)
table.insert(events.handlers[event], func) table.insert(events.handlers[event], func)
end end
function events.reset(event, func)
if func == nil then
events.handlers[event] = nil
else
events.handlers[event] = {func}
end
end
function events.remove_by_prefix(prefix) function events.remove_by_prefix(prefix)
for name, handlers in pairs(events.handlers) do for name, handlers in pairs(events.handlers) do
local actualname = name local actualname = name

View File

@ -616,7 +616,7 @@ bool scripting::register_event(
if (lua::getfield(L, name)) { if (lua::getfield(L, name)) {
lua::pop(L); lua::pop(L);
lua::getglobal(L, "events"); lua::getglobal(L, "events");
lua::getfield(L, "on"); lua::getfield(L, "reset");
lua::pushstring(L, id); lua::pushstring(L, id);
lua::getfield(L, name, -4); lua::getfield(L, name, -4);
lua::call_nothrow(L, 2); lua::call_nothrow(L, 2);
@ -706,6 +706,7 @@ void scripting::load_layout_script(
uidocscript& script uidocscript& script
) { ) {
int env = *senv; int env = *senv;
lua::pop(lua::get_main_state(), load_script(env, "layout", file)); lua::pop(lua::get_main_state(), load_script(env, "layout", file));
script.onopen = register_event(env, "on_open", prefix + ".open"); script.onopen = register_event(env, "on_open", prefix + ".open");
script.onprogress = script.onprogress =