diff --git a/src/gui/luainstance.cpp b/src/gui/luainstance.cpp index db04fefc6..ec504bf7c 100644 --- a/src/gui/luainstance.cpp +++ b/src/gui/luainstance.cpp @@ -420,11 +420,9 @@ void CLuaInstance::registerFunctions() lua_pop(lua, 1); lua_register(lua, className, NewWindow); -#ifdef MARTII - MenueRegister(lua); + MenuRegister(lua); HintboxRegister(lua); MessageboxRegister(lua); -#endif } CLuaData *CLuaInstance::CheckData(lua_State *L, int narg) @@ -722,7 +720,7 @@ bool CLuaInstance::tableLookup(lua_State *L, const char *what, int &value) return res; } -bool CLuaMenueChangeObserver::changeNotify(lua_State *L, const std::string &luaAction, const std::string &luaId, void *Data) +bool CLuaMenuChangeObserver::changeNotify(lua_State *L, const std::string &luaAction, const std::string &luaId, void *Data) { const char *optionValue = (const char *) Data; lua_pushglobaltable(L); @@ -736,54 +734,61 @@ bool CLuaMenueChangeObserver::changeNotify(lua_State *L, const std::string &luaA return res == menu_return::RETURN_REPAINT || res == menu_return::RETURN_EXIT_REPAINT; } -void CLuaInstance::MenueRegister(lua_State *L) +void CLuaInstance::MenuRegister(lua_State *L) { luaL_Reg meth[] = { - { "new", CLuaInstance::MenueNew }, - { "addKey", CLuaInstance::MenueAddKey }, - { "addItem", CLuaInstance::MenueAddItem }, - { "exec", CLuaInstance::MenueExec }, - { "hide", CLuaInstance::MenueHide }, - { "__gc", CLuaInstance::MenueDelete }, + { "new", CLuaInstance::MenuNew }, + { "addKey", CLuaInstance::MenuAddKey }, + { "addItem", CLuaInstance::MenuAddItem }, + { "exec", CLuaInstance::MenuExec }, + { "hide", CLuaInstance::MenuHide }, + { "__gc", CLuaInstance::MenuDelete }, { NULL, NULL } }; - luaL_newmetatable(L, "menue"); + luaL_newmetatable(L, "menu"); + luaL_setfuncs(L, meth, 0); + lua_pushvalue(L, -1); + lua_setfield(L, -1, "__index"); + lua_setglobal(L, "menu"); + + // keep misspelled "menue" for backwards-compatibility + luaL_newmetatable(L, "menu"); luaL_setfuncs(L, meth, 0); lua_pushvalue(L, -1); lua_setfield(L, -1, "__index"); lua_setglobal(L, "menue"); } -CLuaMenue *CLuaInstance::MenueCheck(lua_State *L, int n) +CLuaMenu *CLuaInstance::MenuCheck(lua_State *L, int n) { - return *(CLuaMenue **) luaL_checkudata(L, n, "menue"); + return *(CLuaMenu **) luaL_checkudata(L, n, "menu"); } -CLuaMenue::CLuaMenue() +CLuaMenu::CLuaMenu() { m = NULL; - observ = new CLuaMenueChangeObserver(); + observ = new CLuaMenuChangeObserver(); } -CLuaMenue::~CLuaMenue() +CLuaMenu::~CLuaMenu() { delete m; delete observ; } -CLuaMenueForwarder::CLuaMenueForwarder(lua_State *_L, std::string _luaAction, std::string _luaId) +CLuaMenuForwarder::CLuaMenuForwarder(lua_State *_L, std::string _luaAction, std::string _luaId) { L = _L; luaAction = _luaAction; luaId = _luaId; } -CLuaMenueForwarder::~CLuaMenueForwarder() +CLuaMenuForwarder::~CLuaMenuForwarder() { } -int CLuaMenueForwarder::exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/) +int CLuaMenuForwarder::exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/) { int res = menu_return::RETURN_REPAINT; if (!luaAction.empty()){ @@ -803,13 +808,13 @@ int CLuaMenueForwarder::exec(CMenuTarget* /*parent*/, const std::string & /*acti return res; } -CLuaMenueFilebrowser::CLuaMenueFilebrowser(lua_State *_L, std::string _luaAction, std::string _luaId, char *_value, bool _dirMode) : CLuaMenueForwarder(_L, _luaAction, _luaId) +CLuaMenuFilebrowser::CLuaMenuFilebrowser(lua_State *_L, std::string _luaAction, std::string _luaId, std::string *_value, bool _dirMode) : CLuaMenuForwarder(_L, _luaAction, _luaId) { value = _value; dirMode = _dirMode; } -int CLuaMenueFilebrowser::exec(CMenuTarget* /*parent*/, const std::string& /*actionKey*/) +int CLuaMenuFilebrowser::exec(CMenuTarget* /*parent*/, const std::string& /*actionKey*/) { CFileBrowser fileBrowser; fileBrowser.Dir_Mode = dirMode; @@ -834,7 +839,7 @@ int CLuaMenueFilebrowser::exec(CMenuTarget* /*parent*/, const std::string& /*act return menu_return::RETURN_REPAINT; } -CLuaMenueStringinput::CLuaMenueStringinput(lua_State *_L, std::string _luaAction, std::string _luaId, const char *_name, char *_value, int _size, std::string _valid_chars, CChangeObserver *_observ, const char *_icon, bool _sms) : CLuaMenueForwarder(_L, _luaAction, _luaId) +CLuaMenuStringinput::CLuaMenuStringinput(lua_State *_L, std::string _luaAction, std::string _luaId, const char *_name, std::string *_value, int _size, std::string _valid_chars, CChangeObserver *_observ, const char *_icon, bool _sms) : CLuaMenuForwarder(_L, _luaAction, _luaId) { name = _name; value = _value; @@ -845,7 +850,7 @@ CLuaMenueStringinput::CLuaMenueStringinput(lua_State *_L, std::string _luaAction sms = _sms; } -int CLuaMenueStringinput::exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/) +int CLuaMenuStringinput::exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/) { CStringInput *i; if (sms) @@ -868,7 +873,7 @@ int CLuaMenueStringinput::exec(CMenuTarget* /*parent*/, const std::string & /*ac return menu_return::RETURN_REPAINT; } -int CLuaInstance::MenueNew(lua_State *L) +int CLuaInstance::MenuNew(lua_State *L) { CMenuWidget *m; @@ -884,17 +889,17 @@ int CLuaInstance::MenueNew(lua_State *L) } else m = new CMenuWidget(); - CLuaMenue **udata = (CLuaMenue **) lua_newuserdata(L, sizeof(CLuaMenue *)); - *udata = new CLuaMenue(); + CLuaMenu **udata = (CLuaMenu **) lua_newuserdata(L, sizeof(CLuaMenu *)); + *udata = new CLuaMenu(); (*udata)->m = m; - luaL_getmetatable(L, "menue"); + luaL_getmetatable(L, "menu"); lua_setmetatable(L, -2); return 1; } -int CLuaInstance::MenueDelete(lua_State *L) +int CLuaInstance::MenuDelete(lua_State *L) { - CLuaMenue *m = MenueCheck(L, 1); + CLuaMenu *m = MenuCheck(L, 1); if (!m) return 0; @@ -911,9 +916,9 @@ int CLuaInstance::MenueDelete(lua_State *L) return 0; } -int CLuaInstance::MenueAddKey(lua_State *L) +int CLuaInstance::MenuAddKey(lua_State *L) { - CLuaMenue *m = MenueCheck(L, 1); + CLuaMenu *m = MenuCheck(L, 1); if (!m) return 0; lua_assert(lua_istable(L, 2)); @@ -922,23 +927,23 @@ int CLuaInstance::MenueAddKey(lua_State *L) std::string id; tableLookup(L, "id", id); int directkey = CRCInput::RC_nokey; tableLookup(L, "directkey", directkey); if (action != "" && directkey != (int) CRCInput::RC_nokey) { - CLuaMenueForwarder *forwarder = new CLuaMenueForwarder(L, action, id); + CLuaMenuForwarder *forwarder = new CLuaMenuForwarder(L, action, id); m->m->addKey(directkey, forwarder, action); m->targets.push_back(forwarder); } return 0; } -int CLuaInstance::MenueAddItem(lua_State *L) +int CLuaInstance::MenuAddItem(lua_State *L) { - CLuaMenue *m = MenueCheck(L, 1); + CLuaMenu *m = MenuCheck(L, 1); if (!m) return 0; lua_assert(lua_istable(L, 2)); - CLuaMenueItem i; + CLuaMenuItem i; m->items.push_back(i); - CLuaMenueItem *b = &m->items.back(); + CLuaMenuItem *b = &m->items.back(); tableLookup(L, "name", b->name); std::string icon; tableLookup(L, "icon", icon); @@ -967,10 +972,9 @@ int CLuaInstance::MenueAddItem(lua_State *L) sscanf(tmp.c_str(), "%d,%d", &range_from, &range_to); if (type == "forwarder") { - strncpy(b->s, value.c_str(), sizeof(b->s)); - CLuaMenueForwarder *forwarder = new CLuaMenueForwarder(L, action, id); - CMenuItem *mi = new CMenuForwarderNonLocalized( - b->name.c_str(), enabled, b->s, forwarder, NULL/*ActionKey*/, directkey, icon.c_str(), right_icon.c_str()); + b->str_val = value; + CLuaMenuForwarder *forwarder = new CLuaMenuForwarder(L, action, id); + CMenuItem *mi = new CMenuForwarder(b->name, enabled, b->str_val, forwarder, NULL/*ActionKey*/, directkey, icon.c_str(), right_icon.c_str()); mi->setLua(L, action, id); m->m->addItem(mi); m->targets.push_back(forwarder); @@ -1026,16 +1030,15 @@ int CLuaInstance::MenueAddItem(lua_State *L) tableLookup(L, "valid_chars", valid_chars); int sms = 0; tableLookup(L, "sms", sms); int size = 30; tableLookup(L, "size", size); - CLuaMenueStringinput *stringinput = new CLuaMenueStringinput(L, action, id, b->name.c_str(), b->s, size, valid_chars, m->observ, icon.c_str(), sms); - CMenuItem *mi = new CMenuForwarderNonLocalized( - b->name.c_str(), enabled, b->s, stringinput, NULL/*ActionKey*/, directkey, icon.c_str(), right_icon.c_str()); + CLuaMenuStringinput *stringinput = new CLuaMenuStringinput(L, action, id, b->name.c_str(), &b->str_val, size, valid_chars, m->observ, icon.c_str(), sms); + CMenuItem *mi = new CMenuForwarder(b->name, enabled, b->str_val, stringinput, NULL/*ActionKey*/, directkey, icon.c_str(), right_icon.c_str()); mi->setLua(L, action, id); m->m->addItem(mi); m->targets.push_back(stringinput); } else if (type == "filebrowser") { strncpy(b->s, value.c_str(), sizeof(b->s)); int dirMode = 0; tableLookup(L, "dir_mode", dirMode); - CLuaMenueFilebrowser *filebrowser = new CLuaMenueFilebrowser(L, action, id, b->s, dirMode); + CLuaMenuFilebrowser *filebrowser = new CLuaMenuFilebrowser(L, action, id, &b->str_val, dirMode); lua_pushstring(L, "filter"); lua_gettable(L, -2); if (lua_istable(L, -1)) @@ -1056,18 +1059,18 @@ int CLuaInstance::MenueAddItem(lua_State *L) return 0; } -int CLuaInstance::MenueHide(lua_State *L) +int CLuaInstance::MenuHide(lua_State *L) { - CLuaMenue *m = MenueCheck(L, 1); + CLuaMenu *m = MenuCheck(L, 1); if (!m) return 0; m->m->hide(); return 0; } -int CLuaInstance::MenueExec(lua_State *L) +int CLuaInstance::MenuExec(lua_State *L) { - CLuaMenue *m = MenueCheck(L, 1); + CLuaMenu *m = MenuCheck(L, 1); if (!m) return 0; m->m->exec(NULL, ""); diff --git a/src/gui/luainstance.h b/src/gui/luainstance.h index d20f20164..fa3898b35 100644 --- a/src/gui/luainstance.h +++ b/src/gui/luainstance.h @@ -38,8 +38,8 @@ struct CLuaData CFBWindow *fbwin; CRCInput *rcinput; }; -#ifdef MARTII -struct CLuaMenueItem + +struct CLuaMenuItem { union //value { @@ -49,48 +49,48 @@ struct CLuaMenueItem std::string name; }; -class CLuaMenueChangeObserver : public CChangeObserver +class CLuaMenuChangeObserver : public CChangeObserver { public: bool changeNotify(lua_State *, const std::string &, const std::string &, void *); }; -class CLuaMenue +class CLuaMenu { public: CMenuWidget *m; - CLuaMenueChangeObserver *observ; - std::list items; + CLuaMenuChangeObserver *observ; + std::list items; std::list targets; std::list tofree; - CLuaMenue(); - ~CLuaMenue(); + CLuaMenu(); + ~CLuaMenu(); }; -class CLuaMenueForwarder : public CMenuTarget +class CLuaMenuForwarder : public CMenuTarget { public: lua_State *L; std::string luaAction; std::string luaId; - CLuaMenueForwarder(lua_State *L, std::string _luaAction, std::string _luaId); - ~CLuaMenueForwarder(); + CLuaMenuForwarder(lua_State *L, std::string _luaAction, std::string _luaId); + ~CLuaMenuForwarder(); int exec(CMenuTarget* parent, const std::string & actionKey); }; -class CLuaMenueFilebrowser : public CLuaMenueForwarder +class CLuaMenuFilebrowser : public CLuaMenuForwarder { private: char *value; bool dirMode; std::vector filter; public: - CLuaMenueFilebrowser(lua_State *_L, std::string _luaAction, std::string _luaId, char *_value, bool _dirMode); + CLuaMenuFilebrowser(lua_State *_L, std::string _luaAction, std::string _luaId, std::string *_value, bool _dirMode); int exec(CMenuTarget* parent, const std::string & actionKey); void addFilter(std::string s) { filter.push_back(s); }; }; -class CLuaMenueStringinput : public CLuaMenueForwarder +class CLuaMenuStringinput : public CLuaMenuForwarder { private: char *value; @@ -101,7 +101,7 @@ class CLuaMenueStringinput : public CLuaMenueForwarder int size; CChangeObserver *observ; public: - CLuaMenueStringinput(lua_State *_L, std::string _luaAction, std::string _luaId, const char *_name, char *_value, int _size, std::string _valid_chars, CChangeObserver *_observ, const char *_icon, bool _sms); + CLuaMenuStringinput(lua_State *_L, std::string _luaAction, std::string _luaId, const char *_name, std::string *_value, int _size, std::string _valid_chars, CChangeObserver *_observ, const char *_icon, bool _sms); int exec(CMenuTarget* parent, const std::string & actionKey); }; @@ -129,9 +129,7 @@ class CLuaInstance { static const char className[]; static const luaL_Reg methods[]; -#ifdef MARTII - static const luaL_Reg menue_methods[]; -#endif + static const luaL_Reg menu_methods[]; static CLuaData *CheckData(lua_State *L, int narg); public: CLuaInstance(); @@ -155,14 +153,14 @@ private: static int GetSize(lua_State *L); static int DisplayImage(lua_State *L); - void MenueRegister(lua_State *L); - static int MenueNew(lua_State *L); - static int MenueDelete(lua_State *L); - static int MenueAddKey(lua_State *L); - static int MenueAddItem(lua_State *L); - static int MenueHide(lua_State *L); - static int MenueExec(lua_State *L); - static CLuaMenue *MenueCheck(lua_State *L, int n); + void MenuRegister(lua_State *L); + static int MenuNew(lua_State *L); + static int MenuDelete(lua_State *L); + static int MenuAddKey(lua_State *L); + static int MenuAddItem(lua_State *L); + static int MenuHide(lua_State *L); + static int MenuExec(lua_State *L); + static CLuaMenu *MenuCheck(lua_State *L, int n); void HintboxRegister(lua_State *L); static int HintboxNew(lua_State *L);