mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-26 15:02:56 +02:00
CLuaInstance: Multiple functions made from CComponents in CLuaInstance available
- CComponentsWindow: new(), paint(), hide() - CSignalBox: new(), paint()
This commit is contained in:
@@ -417,6 +417,8 @@ void CLuaInstance::registerFunctions()
|
||||
MenuRegister(lua);
|
||||
HintboxRegister(lua);
|
||||
MessageboxRegister(lua);
|
||||
CWindowRegister(lua);
|
||||
SignalBoxRegister(lua);
|
||||
}
|
||||
|
||||
CLuaData *CLuaInstance::CheckData(lua_State *L, int narg)
|
||||
@@ -1281,3 +1283,159 @@ int CLuaInstance::MessageboxExec(lua_State *L)
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
void CLuaInstance::CWindowRegister(lua_State *L)
|
||||
{
|
||||
luaL_Reg meth[] = {
|
||||
{ "new", CLuaInstance::CWindowNew },
|
||||
{ "paint", CLuaInstance::CWindowPaint },
|
||||
{ "hide", CLuaInstance::CWindowHide },
|
||||
{ "__gc", CLuaInstance::CWindowDelete },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
#if 0
|
||||
{ "exec", CLuaInstance::CWindowExec },
|
||||
#endif
|
||||
|
||||
luaL_newmetatable(L, "cwindow");
|
||||
luaL_setfuncs(L, meth, 0);
|
||||
lua_pushvalue(L, -1);
|
||||
lua_setfield(L, -1, "__index");
|
||||
lua_setglobal(L, "cwindow");
|
||||
}
|
||||
|
||||
int CLuaInstance::CWindowNew(lua_State *L)
|
||||
{
|
||||
lua_assert(lua_istable(L,1));
|
||||
|
||||
std::string name, icon = std::string(NEUTRINO_ICON_INFO);
|
||||
int x = 100, y = 100, dx = 450, dy = 250;
|
||||
tableLookup(L, "x", x);
|
||||
tableLookup(L, "y", y);
|
||||
tableLookup(L, "dx", dx);
|
||||
tableLookup(L, "dy", dy);
|
||||
tableLookup(L, "name", name) || tableLookup(L, "title", name) || tableLookup(L, "caption", name);
|
||||
tableLookup(L, "icon", icon);
|
||||
|
||||
CLuaCWindow **udata = (CLuaCWindow **) lua_newuserdata(L, sizeof(CLuaCWindow *));
|
||||
*udata = new CLuaCWindow();
|
||||
(*udata)->w = new CComponentsWindow(x, y, dx, dy, name.c_str(), icon.c_str());
|
||||
luaL_getmetatable(L, "cwindow");
|
||||
lua_setmetatable(L, -2);
|
||||
return 1;
|
||||
}
|
||||
|
||||
CLuaCWindow *CLuaInstance::CWindowCheck(lua_State *L, int n)
|
||||
{
|
||||
return *(CLuaCWindow **) luaL_checkudata(L, n, "cwindow");
|
||||
}
|
||||
|
||||
int CLuaInstance::CWindowPaint(lua_State *L)
|
||||
{
|
||||
lua_assert(lua_istable(L,1));
|
||||
int do_save_bg = 1;
|
||||
tableLookup(L, "do_save_bg", do_save_bg);
|
||||
|
||||
CLuaCWindow *m = CWindowCheck(L, 1);
|
||||
if (!m)
|
||||
return 0;
|
||||
|
||||
m->w->paint((do_save_bg!=0)?true:false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CLuaInstance::CWindowHide(lua_State *L)
|
||||
{
|
||||
lua_assert(lua_istable(L,1));
|
||||
int no_restore = 0;
|
||||
tableLookup(L, "no_restore", no_restore);
|
||||
|
||||
CLuaCWindow *m = CWindowCheck(L, 1);
|
||||
if (!m)
|
||||
return 0;
|
||||
|
||||
m->w->hide((no_restore!=0)?true:false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CLuaInstance::CWindowDelete(lua_State *L)
|
||||
{
|
||||
CLuaCWindow *m = CWindowCheck(L, 1);
|
||||
if (!m)
|
||||
return 0;
|
||||
|
||||
m->w->kill();
|
||||
delete m;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
CLuaSignalBox *CLuaInstance::SignalBoxCheck(lua_State *L, int n)
|
||||
{
|
||||
return *(CLuaSignalBox **) luaL_checkudata(L, n, "signalbox");
|
||||
}
|
||||
|
||||
void CLuaInstance::SignalBoxRegister(lua_State *L)
|
||||
{
|
||||
luaL_Reg meth[] = {
|
||||
{ "new", CLuaInstance::SignalBoxNew },
|
||||
{ "paint", CLuaInstance::SignalBoxPaint },
|
||||
{ "__gc", CLuaInstance::SignalBoxDelete },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
luaL_newmetatable(L, "signalbox");
|
||||
luaL_setfuncs(L, meth, 0);
|
||||
lua_pushvalue(L, -1);
|
||||
lua_setfield(L, -1, "__index");
|
||||
lua_setglobal(L, "signalbox");
|
||||
}
|
||||
|
||||
int CLuaInstance::SignalBoxNew(lua_State *L)
|
||||
{
|
||||
lua_assert(lua_istable(L,1));
|
||||
|
||||
std::string name, icon = std::string(NEUTRINO_ICON_INFO);
|
||||
int x = 110, y = 150, dx = 430, dy = 150;
|
||||
tableLookup(L, "x", x);
|
||||
tableLookup(L, "y", y);
|
||||
tableLookup(L, "dx", dx);
|
||||
tableLookup(L, "dy", dy);
|
||||
|
||||
CLuaSignalBox **udata = (CLuaSignalBox **) lua_newuserdata(L, sizeof(CLuaSignalBox *));
|
||||
*udata = new CLuaSignalBox();
|
||||
(*udata)->s = new CSignalBox(x, y, dx, dy);
|
||||
luaL_getmetatable(L, "signalbox");
|
||||
lua_setmetatable(L, -2);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int CLuaInstance::SignalBoxPaint(lua_State *L)
|
||||
{
|
||||
lua_assert(lua_istable(L,1));
|
||||
int do_save_bg = 1;
|
||||
tableLookup(L, "do_save_bg", do_save_bg);
|
||||
|
||||
CLuaSignalBox *m = SignalBoxCheck(L, 1);
|
||||
if (!m)
|
||||
return 0;
|
||||
|
||||
m->s->paint((do_save_bg!=0)?true:false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CLuaInstance::SignalBoxDelete(lua_State *L)
|
||||
{
|
||||
CLuaSignalBox *m = SignalBoxCheck(L, 1);
|
||||
if (!m)
|
||||
return 0;
|
||||
|
||||
m->s->kill();
|
||||
delete m;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
@@ -29,6 +29,7 @@ extern "C" {
|
||||
#include <gui/widget/menue.h>
|
||||
#include <gui/widget/hintbox.h>
|
||||
#include <gui/widget/messagebox.h>
|
||||
#include <gui/components/cc.h>
|
||||
|
||||
/* this is stored as userdata in the lua_State */
|
||||
struct CLuaData
|
||||
@@ -117,6 +118,21 @@ class CLuaMessagebox
|
||||
~CLuaMessagebox();
|
||||
};
|
||||
|
||||
class CLuaCWindow
|
||||
{
|
||||
public:
|
||||
CComponentsWindow *w;
|
||||
CLuaCWindow() { w = NULL; }
|
||||
~CLuaCWindow() { delete w; }
|
||||
};
|
||||
|
||||
class CLuaSignalBox
|
||||
{
|
||||
public:
|
||||
CSignalBox *s;
|
||||
CLuaSignalBox() { s = NULL; }
|
||||
~CLuaSignalBox() { delete s; }
|
||||
};
|
||||
|
||||
|
||||
/* inspired by Steve Kemp http://www.steve.org.uk/ */
|
||||
@@ -168,6 +184,19 @@ private:
|
||||
static int MessageboxExec(lua_State *L);
|
||||
static CLuaMessagebox *MessageboxCheck(lua_State *L, int n);
|
||||
|
||||
void CWindowRegister(lua_State *L);
|
||||
static int CWindowNew(lua_State *L);
|
||||
static CLuaCWindow *CWindowCheck(lua_State *L, int n);
|
||||
static int CWindowPaint(lua_State *L);
|
||||
static int CWindowHide(lua_State *L);
|
||||
static int CWindowDelete(lua_State *L);
|
||||
|
||||
static CLuaSignalBox *SignalBoxCheck(lua_State *L, int n);
|
||||
static void SignalBoxRegister(lua_State *L);
|
||||
static int SignalBoxNew(lua_State *L);
|
||||
static int SignalBoxPaint(lua_State *L);
|
||||
static int SignalBoxDelete(lua_State *L);
|
||||
|
||||
static bool tableLookup(lua_State*, const char*, std::string&);
|
||||
static bool tableLookup(lua_State*, const char*, int&);
|
||||
};
|
||||
|
Reference in New Issue
Block a user