/* * lua menue * * (C) 2014 by martii * (C) 2014-2015 M. Liebmann (micha-bbg) * (C) 2014 Sven Hoefer (svenhoefer) * (C) 2015 Jacek Jendrzej (SatBaby) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef _LUAMENUE_H #define _LUAMENUE_H struct CLuaMenuItem { int int_val; std::string str_val; std::string name; }; class CLuaMenuChangeObserver : public CChangeObserver { public: bool changeNotify(lua_State *, const std::string &, const std::string &, void *); }; typedef std::pair itemmap_pair_t; typedef std::map itemmap_t; typedef itemmap_t::iterator itemmap_iterator_t; class CLuaMenu { public: CMenuWidget *m; CLuaMenuChangeObserver *observ; std::list items; std::list targets; std::list tofree; itemmap_t itemmap; CLuaMenu(); ~CLuaMenu(); }; class CLuaMenuForwarder : public CMenuTarget { private: void Init(lua_State *_L, std::string _luaAction, std::string _luaId); public: lua_State *L; std::string luaAction; std::string luaId; CLuaMenuForwarder(lua_State *L, std::string _luaAction, std::string _luaId); ~CLuaMenuForwarder(); int exec(CMenuTarget* parent=NULL, const std::string & actionKey=""); }; class CLuaMenuFilebrowser : public CLuaMenuForwarder { private: std::string *value; bool dirMode; std::vector filter; void Init(std::string *_value, bool _dirMode); public: CLuaMenuFilebrowser(lua_State *_L, std::string _luaAction, std::string _luaId, std::string *_value, bool _dirMode); int exec(CMenuTarget* parent=NULL, const std::string & actionKey=""); void addFilter(std::string s) { filter.push_back(s); }; }; class CLuaMenuStringinput : public CLuaMenuForwarder { private: std::string *value; std::string valid_chars; const char *name; const char *icon; bool sms; int size; CChangeObserver *observ; void Init(const char *_name, std::string *_value, int _size, std::string _valid_chars, CChangeObserver *_observ, const char *_icon, bool _sms); public: 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=NULL, const std::string & actionKey=""); }; class CLuaMenuKeyboardinput : public CLuaMenuForwarder { private: std::string *value; const char *name; const char *icon; int size; CChangeObserver *observ; std::string help, help2; void Init(const char *_name, std::string *_value, int _size, CChangeObserver *_observ, const char *_icon, std::string _help, std::string _help2); public: CLuaMenuKeyboardinput(lua_State *_L, std::string _luaAction, std::string _luaId, const char *_name, std::string *_value, int _size, CChangeObserver *_observ, const char *_icon, std::string _help, std::string _help2); int exec(CMenuTarget* parent=NULL, const std::string & actionKey=""); }; class CLuaInstMenu { public: CLuaInstMenu() {}; ~CLuaInstMenu() {}; static CLuaInstMenu* getInstance(); static void MenuRegister(lua_State *L); private: static CLuaMenu *MenuCheck(lua_State *L, int n); static int MenuNew(lua_State *L); static int MenuAddKey(lua_State *L); static int MenuAddItem(lua_State *L); static int MenuExec(lua_State *L); static int MenuHide(lua_State *L); static int MenuSetActive(lua_State *L); static int MenuSetName(lua_State *L); static int MenuDelete(lua_State *L); }; #endif //_LUAMENUE_H