2014-04-16 03:42:18 -07:00
|
|
|
-- EFL LuaJIT bindings: Eo
|
|
|
|
-- For use with Elua
|
|
|
|
|
|
|
|
local ffi = require("ffi")
|
|
|
|
|
|
|
|
ffi.cdef [[
|
|
|
|
typedef unsigned char Eina_Bool;
|
|
|
|
|
|
|
|
typedef struct _Eo_Opaque Eo;
|
|
|
|
typedef Eo Eo_Class;
|
|
|
|
|
|
|
|
Eina_Bool eo_init(void);
|
|
|
|
Eina_Bool eo_shutdown(void);
|
|
|
|
|
2014-06-05 03:15:29 -07:00
|
|
|
Eina_Bool eo_isa(const Eo *obj, const Eo_Class *klass);
|
|
|
|
|
2014-04-16 03:42:18 -07:00
|
|
|
void eo_constructor(void);
|
|
|
|
void eo_destructor(void);
|
|
|
|
|
|
|
|
Eo *_eo_add_internal_start(const char *file, int line,
|
|
|
|
const Eo_Class *klass_id, Eo *parent);
|
|
|
|
|
|
|
|
Eina_Bool _eo_do_start(const Eo *obj, const Eo_Class *cur_klass,
|
|
|
|
Eina_Bool is_super, const char *file, const char *func, int line);
|
|
|
|
void _eo_do_end (const Eo **ojb);
|
|
|
|
|
2014-06-05 08:28:10 -07:00
|
|
|
Eo *eo_finalize(void);
|
|
|
|
|
2014-04-16 03:42:18 -07:00
|
|
|
void eo_parent_set(Eo *parent);
|
|
|
|
Eo *eo_parent_get(void);
|
|
|
|
|
|
|
|
void eo_event_freeze(void);
|
|
|
|
void eo_event_thaw(void);
|
2014-06-05 08:28:10 -07:00
|
|
|
int eo_event_freeze_count_get(void);
|
2014-04-16 03:42:18 -07:00
|
|
|
void eo_event_global_freeze(void);
|
|
|
|
void eo_event_global_thaw(void);
|
2014-06-05 08:28:10 -07:00
|
|
|
int eo_event_global_freeze_count_get(void);
|
2014-04-16 03:42:18 -07:00
|
|
|
]]
|
|
|
|
|
|
|
|
local cutil = require("cutil")
|
|
|
|
local util = require("util")
|
|
|
|
|
|
|
|
local M = {}
|
|
|
|
|
|
|
|
local eo
|
|
|
|
|
|
|
|
local init = function()
|
|
|
|
eo = util.lib_load("eo")
|
|
|
|
eo.eo_init()
|
|
|
|
end
|
|
|
|
|
|
|
|
local shutdown = function()
|
|
|
|
eo.eo_shutdown()
|
|
|
|
util.lib_unload("eo")
|
|
|
|
end
|
|
|
|
|
|
|
|
cutil.init_module(init, shutdown)
|
|
|
|
|
|
|
|
local getinfo = debug.getinfo
|
|
|
|
|
|
|
|
local getfuncname = function(info)
|
|
|
|
return info.name or "<" .. tostring(info.func) .. ">"
|
|
|
|
end
|
|
|
|
|
2014-04-23 01:25:39 -07:00
|
|
|
local classes = {}
|
|
|
|
|
|
|
|
M.class_get = function(name)
|
|
|
|
return classes[name]
|
|
|
|
end
|
|
|
|
|
|
|
|
M.class_register = function(name, val)
|
|
|
|
classes[name] = val
|
|
|
|
end
|
|
|
|
|
2014-04-16 03:42:18 -07:00
|
|
|
M.Eo_Base = util.Object:clone {
|
2014-04-17 03:14:16 -07:00
|
|
|
__ctor_common = function(self, klass, parent, ctor, loff, ...)
|
2014-04-16 03:42:18 -07:00
|
|
|
local info = getinfo(2 + (loff or 0), "nlSf")
|
|
|
|
local source = info.source
|
|
|
|
local func = getfuncname(info)
|
|
|
|
local line = info.currentline
|
|
|
|
local tmp_obj = eo._eo_add_internal_start(source, line, klass,
|
|
|
|
parent.__obj)
|
2014-04-22 07:17:04 -07:00
|
|
|
local retval
|
2014-04-16 03:42:18 -07:00
|
|
|
if eo._eo_do_start(tmp_obj, nil, false, source, func, line) ~= 0 then
|
|
|
|
if ctor then
|
2014-04-22 07:17:04 -07:00
|
|
|
retval = ctor(...)
|
2014-04-16 03:42:18 -07:00
|
|
|
else
|
|
|
|
eo.eo_constructor()
|
|
|
|
end
|
2014-06-05 08:28:10 -07:00
|
|
|
tmp_obj = eo.eo_finalize()
|
2014-04-16 03:42:18 -07:00
|
|
|
eo._eo_do_end(nil)
|
|
|
|
end
|
|
|
|
self.__obj = tmp_obj
|
|
|
|
self.__parent = parent
|
2014-04-22 07:17:04 -07:00
|
|
|
return retval
|
2014-04-16 03:42:18 -07:00
|
|
|
end,
|
|
|
|
|
2014-06-05 03:15:29 -07:00
|
|
|
__do_start = function(self, klass)
|
|
|
|
if eo.eo_isa(self.__obj, klass) == 0 then
|
|
|
|
error("method call on an invalid object", 3)
|
|
|
|
end
|
2014-04-16 03:42:18 -07:00
|
|
|
local info = getinfo(3, "nlSf")
|
|
|
|
return eo._eo_do_start(self.__obj, nil, false, info.source,
|
|
|
|
getfuncname(info), info.currentline) ~= 0
|
|
|
|
end,
|
|
|
|
|
|
|
|
__do_end = function(self)
|
|
|
|
eo._eo_do_end(nil) -- the parameter is unused and originally there
|
|
|
|
-- only for cleanup (dtor)
|
|
|
|
end
|
|
|
|
}
|
|
|
|
|
|
|
|
return M
|