CHANGED: #1471 Moved back some more static methods from CLuaIHMRyzom to CLuaIHM, as CLuaIHM can now handle these too.
--HG-- branch : gui-refactoring
This commit is contained in:
parent
c792abe091
commit
a05fe020c3
4 changed files with 663 additions and 656 deletions
|
@ -159,6 +159,31 @@ namespace NLGUI
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static int luaMethodCall(lua_State *ls);
|
static int luaMethodCall(lua_State *ls);
|
||||||
|
|
||||||
|
static int setOnDraw(CLuaState &ls); // params: CInterfaceGroup*, "script". return: none
|
||||||
|
static int addOnDbChange(CLuaState &ls); // params: CInterfaceGroup*, "dblist", "script". return: none
|
||||||
|
static int removeOnDbChange(CLuaState &ls);// params: CInterfaceGroup*. return: none
|
||||||
|
static int setCaptureKeyboard(CLuaState &ls);
|
||||||
|
static int resetCaptureKeyboard(CLuaState &ls);
|
||||||
|
static int getUIId(CLuaState &ls); // params: CInterfaceElement*. return: ui id (empty if error)
|
||||||
|
static int runAH(CLuaState &ls); // params: CInterfaceElement *, "ah", "params". return: none
|
||||||
|
static int getWindowSize(CLuaState &ls);
|
||||||
|
static int setTopWindow(CLuaState &ls); // set the top window
|
||||||
|
static int getTextureSize(CLuaState &ls);
|
||||||
|
static int disableModalWindow(CLuaState &ls);
|
||||||
|
static int deleteUI(CLuaState &ls); // params: CInterfaceElement*.... return: none
|
||||||
|
static int deleteReflectable(CLuaState &ls); // params: CInterfaceElement*.... return: none
|
||||||
|
static int getCurrentWindowUnder(CLuaState &ls); // params: none. return: CInterfaceElement* (nil if none)
|
||||||
|
static bool fileExists(const std::string &fileName);
|
||||||
|
static int runExprAndPushResult(CLuaState &ls, const std::string &expr); // Used by runExpr and runFct
|
||||||
|
static int runExpr(CLuaState &ls); // params: "expr". return: any of: nil,bool,string,number, RGBA, UCString
|
||||||
|
static int runFct(CLuaState &ls); // params: "expr", param1, param2.... return: any of: nil,bool,string,number, RGBA, UCString
|
||||||
|
static int runCommand(CLuaState &ls); // params: "command name", param1, param2 ... return true or false
|
||||||
|
static int isUCString(CLuaState &ls);
|
||||||
|
static int concatUCString(CLuaState &ls); // workaround for + operator that don't work in luabind for ucstrings ...
|
||||||
|
static int concatString(CLuaState &ls); // speedup concatenation of several strings
|
||||||
|
static int tableToString(CLuaState &ls); // concat element of a table to build a string
|
||||||
|
static int getPathContent(CLuaState &ls);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,10 +71,15 @@
|
||||||
#include "nel/misc/time_nl.h"
|
#include "nel/misc/time_nl.h"
|
||||||
#include "nel/misc/path.h"
|
#include "nel/misc/path.h"
|
||||||
#include "nel/misc/sstring.h"
|
#include "nel/misc/sstring.h"
|
||||||
|
#include "nel/misc/command.h"
|
||||||
#include "nel/gui/lua_object.h"
|
#include "nel/gui/lua_object.h"
|
||||||
#include "nel/misc/polygon.h"
|
#include "nel/misc/polygon.h"
|
||||||
#include "nel/gui/lua_manager.h"
|
#include "nel/gui/lua_manager.h"
|
||||||
|
#include "nel/gui/widget_manager.h"
|
||||||
|
#include "nel/gui/action_handler.h"
|
||||||
|
#include "nel/gui/view_renderer.h"
|
||||||
|
#include "nel/gui/interface_expr.h"
|
||||||
|
#include "nel/misc/debug.h"
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
/*
|
/*
|
||||||
|
@ -757,6 +762,614 @@ namespace NLGUI
|
||||||
return numResults;
|
return numResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::setOnDraw(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_setOnDraw)
|
||||||
|
CLuaStackChecker lsc(&ls, 0);
|
||||||
|
|
||||||
|
// params: CInterfaceGroup*, "script".
|
||||||
|
// return: none
|
||||||
|
CLuaIHM::checkArgCount(ls, "setOnDraw", 2);
|
||||||
|
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "setOnDraw() requires a UI object in param 1");
|
||||||
|
CLuaIHM::check(ls, ls.isString(2), "setOnDraw() requires a string in param 2");
|
||||||
|
|
||||||
|
// retrieve args
|
||||||
|
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
||||||
|
std::string script;
|
||||||
|
ls.toString(2, script);
|
||||||
|
|
||||||
|
// must be a group
|
||||||
|
CInterfaceGroup *group= dynamic_cast<CInterfaceGroup*>(pIE);
|
||||||
|
if(!group)
|
||||||
|
throw ELuaIHMException("setOnDraw(): '%s' is not a group", pIE->getId().c_str());
|
||||||
|
// Set the script to be executed at each draw
|
||||||
|
group->setLuaScriptOnDraw(script);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::addOnDbChange(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_addOnDbChange)
|
||||||
|
CLuaStackChecker lsc(&ls, 0);
|
||||||
|
|
||||||
|
// params: CInterfaceGroup*, "dblist", "script".
|
||||||
|
// return: none
|
||||||
|
CLuaIHM::checkArgCount(ls, "addOnDbChange", 3);
|
||||||
|
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "addOnDbChange() requires a UI object in param 1");
|
||||||
|
CLuaIHM::check(ls, ls.isString(2), "addOnDbChange() requires a string in param 2");
|
||||||
|
CLuaIHM::check(ls, ls.isString(3), "addOnDbChange() requires a string in param 3");
|
||||||
|
|
||||||
|
// retrieve args
|
||||||
|
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
||||||
|
std::string dbList, script;
|
||||||
|
ls.toString(2, dbList);
|
||||||
|
ls.toString(3, script);
|
||||||
|
|
||||||
|
// must be a group
|
||||||
|
CInterfaceGroup *group= dynamic_cast<CInterfaceGroup*>(pIE);
|
||||||
|
if(!group)
|
||||||
|
throw ELuaIHMException("addOnDbChange(): '%s' is not a group", pIE->getId().c_str());
|
||||||
|
// Set the script to be executed when the given DB change
|
||||||
|
group->addLuaScriptOnDBChange(dbList, script);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::removeOnDbChange(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_removeOnDbChange)
|
||||||
|
CLuaStackChecker lsc(&ls, 0);
|
||||||
|
|
||||||
|
// params: CInterfaceGroup*, "dbList"
|
||||||
|
// return: none
|
||||||
|
CLuaIHM::checkArgCount(ls, "removeOnDbChange", 2);
|
||||||
|
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "removeOnDbChange() requires a UI object in param 1");
|
||||||
|
CLuaIHM::check(ls, ls.isString(2), "removeOnDbChange() requires a string in param 2");
|
||||||
|
|
||||||
|
// retrieve args
|
||||||
|
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
||||||
|
std::string dbList;
|
||||||
|
ls.toString(2, dbList);
|
||||||
|
|
||||||
|
// must be a group
|
||||||
|
CInterfaceGroup *group= dynamic_cast<CInterfaceGroup*>(pIE);
|
||||||
|
if(!group)
|
||||||
|
throw ELuaIHMException("removeOnDbChange(): '%s' is not a group", pIE->getId().c_str());
|
||||||
|
// Remove the script to be executed when the given DB change
|
||||||
|
group->removeLuaScriptOnDBChange(dbList);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::setCaptureKeyboard(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_setCaptureKeyboard)
|
||||||
|
const char *funcName = "setCaptureKeyboard";
|
||||||
|
CLuaIHM::checkArgCount(ls, funcName, 1);
|
||||||
|
CLuaIHM::checkArgTypeUIElement(ls, funcName, 1);
|
||||||
|
CCtrlBase *ctrl = dynamic_cast<CCtrlBase *>( CLuaIHM::getUIOnStack(ls, 1));
|
||||||
|
if (!ctrl)
|
||||||
|
{
|
||||||
|
CLuaIHM::fails(ls, "%s waits a ui control as arg 1", funcName);
|
||||||
|
}
|
||||||
|
CWidgetManager::getInstance()->setCaptureKeyboard(ctrl);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::resetCaptureKeyboard(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_resetCaptureKeyboard)
|
||||||
|
const char *funcName = "resetCaptureKeyboard";
|
||||||
|
CLuaIHM::checkArgCount(ls, funcName, 0);
|
||||||
|
CWidgetManager::getInstance()->resetCaptureKeyboard();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::getUIId(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_getUIId)
|
||||||
|
CLuaStackChecker lsc(&ls, 1);
|
||||||
|
|
||||||
|
// params: CInterfaceElement*
|
||||||
|
// return: "ui:interface:...". (empty if error)
|
||||||
|
CLuaIHM::checkArgCount(ls, "getUIId", 1);
|
||||||
|
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "getUIId() requires a UI object in param 1");
|
||||||
|
|
||||||
|
// retrieve args
|
||||||
|
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
||||||
|
|
||||||
|
// convert to id
|
||||||
|
if(pIE)
|
||||||
|
ls.push(pIE->getId());
|
||||||
|
else
|
||||||
|
ls.push("");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::runAH(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_runAH)
|
||||||
|
CLuaStackChecker lsc(&ls, 0);
|
||||||
|
|
||||||
|
// params: CInterfaceElement *, "ah", "params".
|
||||||
|
// return: none
|
||||||
|
CLuaIHM::checkArgCount(ls, "runAH", 3);
|
||||||
|
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1) || ls.isNil(1), "runAH() requires a UI object in param 1 (or Nil)");
|
||||||
|
CLuaIHM::check(ls, ls.isString(2), "runAH() requires a string in param 2");
|
||||||
|
CLuaIHM::check(ls, ls.isString(3), "runAH() requires a string in param 3");
|
||||||
|
|
||||||
|
// retrieve args
|
||||||
|
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
||||||
|
std::string ah, params;
|
||||||
|
ls.toString(2, ah);
|
||||||
|
ls.toString(3, params);
|
||||||
|
|
||||||
|
// run AH
|
||||||
|
// The element must be ctrl (or NULL)
|
||||||
|
CCtrlBase *ctrl= NULL;
|
||||||
|
if(pIE)
|
||||||
|
{
|
||||||
|
ctrl= dynamic_cast<CCtrlBase*>(pIE);
|
||||||
|
if(!ctrl)
|
||||||
|
throw ELuaIHMException("runAH(): '%s' is not a ctrl", pIE->getId().c_str());
|
||||||
|
}
|
||||||
|
CAHManager::getInstance()->runActionHandler(ah, ctrl, params);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::getWindowSize(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_getWindowSize)
|
||||||
|
CLuaIHM::checkArgCount(ls, "getWindowSize", 0);
|
||||||
|
uint32 w, h;
|
||||||
|
CViewRenderer::getInstance()->getScreenSize(w, h);
|
||||||
|
ls.push((double) w);
|
||||||
|
ls.push((double) h);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::setTopWindow(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_setTopWindow)
|
||||||
|
const char *funcName = "setTopWindow";
|
||||||
|
CLuaIHM::checkArgCount(ls, funcName, 1);
|
||||||
|
CInterfaceGroup *wnd = dynamic_cast<CInterfaceGroup *>( CLuaIHM::getUIOnStack(ls, 1));
|
||||||
|
if (!wnd)
|
||||||
|
{
|
||||||
|
CLuaIHM::fails(ls, "%s : interface group expected as arg 1", funcName);
|
||||||
|
}
|
||||||
|
CWidgetManager::getInstance()->setTopWindow(wnd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CLuaIHM::getTextureSize(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_getTextureSize)
|
||||||
|
const char *funcName = "getTextureSize";
|
||||||
|
CLuaIHM::checkArgCount(ls, funcName, 1);
|
||||||
|
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
|
||||||
|
std::string textureName = ls.toString(1);
|
||||||
|
|
||||||
|
CBitmap bitmap;
|
||||||
|
CIFile fs(CPath::lookup(textureName).c_str());
|
||||||
|
bitmap.load(fs);
|
||||||
|
|
||||||
|
ls.push((double) bitmap.getWidth());
|
||||||
|
ls.push((double) bitmap.getHeight());
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::disableModalWindow(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_disableModalWindow)
|
||||||
|
CLuaIHM::checkArgCount(ls, "disableModalWindow", 0);
|
||||||
|
CWidgetManager::getInstance()->disableModalWindow();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::deleteUI(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_deleteUI)
|
||||||
|
CLuaStackChecker lsc(&ls, 0);
|
||||||
|
|
||||||
|
// params: CInterfaceElement *
|
||||||
|
// return: none
|
||||||
|
CLuaIHM::checkArgCount(ls, "deleteUI", 1);
|
||||||
|
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "deleteUI() requires a UI object in param 1");
|
||||||
|
|
||||||
|
// retrieve args
|
||||||
|
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
||||||
|
if(!pIE)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// has a parent?
|
||||||
|
CInterfaceGroup *parent= pIE->getParent();
|
||||||
|
if(parent)
|
||||||
|
{
|
||||||
|
// correctly remove from parent
|
||||||
|
parent->delElement(pIE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// just delete
|
||||||
|
delete pIE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::deleteReflectable(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_deleteReflectable)
|
||||||
|
CLuaStackChecker lsc(&ls, 0);
|
||||||
|
|
||||||
|
// params: CInterfaceElement *
|
||||||
|
// return: none
|
||||||
|
CLuaIHM::checkArgCount(ls, "deleteReflectable", 1);
|
||||||
|
CLuaIHM::check(ls, CLuaIHM::isReflectableOnStack(ls, 1), "deleteReflectable() requires a reflectable C++ object in param 1");
|
||||||
|
|
||||||
|
// retrieve args
|
||||||
|
CReflectableRefPtrTarget *pRPT= CLuaIHM::getReflectableOnStack(ls, 1);
|
||||||
|
if(!pRPT)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
|
CInterfaceElement *pIE = dynamic_cast<CInterfaceElement *>(pRPT);
|
||||||
|
|
||||||
|
if (pIE)
|
||||||
|
{
|
||||||
|
// has a parent?
|
||||||
|
CInterfaceGroup *parent= pIE->getParent();
|
||||||
|
if(parent)
|
||||||
|
{
|
||||||
|
// correctly remove from parent
|
||||||
|
parent->delElement(pIE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// just delete
|
||||||
|
delete pIE;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int CLuaIHM::getCurrentWindowUnder(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_getCurrentWindowUnder)
|
||||||
|
CLuaStackChecker lsc(&ls, 1);
|
||||||
|
CInterfaceElement *pIE= CWidgetManager::getInstance()->getCurrentWindowUnder();
|
||||||
|
if(!pIE)
|
||||||
|
{
|
||||||
|
ls.pushNil();
|
||||||
|
nlerror("getCurrentWindowUnder(): No UICaller found. return Nil");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CLuaIHM::pushUIOnStack(ls, pIE);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
bool CLuaIHM::fileExists(const std::string &fileName)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_fileExists)
|
||||||
|
return CPath::exists(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::runExprAndPushResult(CLuaState &ls, const std::string &expr)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_runExprAndPushResult)
|
||||||
|
// Execute expression
|
||||||
|
CInterfaceExprValue value;
|
||||||
|
if (CInterfaceExpr::eval(expr, value, NULL))
|
||||||
|
{
|
||||||
|
switch(value.getType())
|
||||||
|
{
|
||||||
|
case CInterfaceExprValue::Boolean:
|
||||||
|
ls.push(value.getBool());
|
||||||
|
break;
|
||||||
|
case CInterfaceExprValue::Integer:
|
||||||
|
ls.push((double)value.getInteger());
|
||||||
|
break;
|
||||||
|
case CInterfaceExprValue::Double:
|
||||||
|
ls.push(value.getDouble());
|
||||||
|
break;
|
||||||
|
case CInterfaceExprValue::String:
|
||||||
|
{
|
||||||
|
ucstring ucstr= value.getUCString();
|
||||||
|
// Yoyo: dynamically decide whether must return a string or a ucstring
|
||||||
|
bool mustUseUCString= false;
|
||||||
|
for (uint i = 0; i < ucstr.size (); i++)
|
||||||
|
{
|
||||||
|
if (ucstr[i] > 255)
|
||||||
|
{
|
||||||
|
mustUseUCString= true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// push a ucstring?
|
||||||
|
if(mustUseUCString)
|
||||||
|
{
|
||||||
|
#if LUABIND_VERSION > 600
|
||||||
|
luabind::detail::push(ls.getStatePointer(), ucstr);
|
||||||
|
#else
|
||||||
|
luabind::object obj(ls.getStatePointer(), ucstr);
|
||||||
|
obj.pushvalue();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ls.push(ucstr.toString());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CInterfaceExprValue::RGBA:
|
||||||
|
{
|
||||||
|
CRGBA color = value.getRGBA();
|
||||||
|
#if LUABIND_VERSION > 600
|
||||||
|
luabind::detail::push(ls.getStatePointer(), color);
|
||||||
|
#else
|
||||||
|
luabind::object obj(ls.getStatePointer(), color);
|
||||||
|
obj.pushvalue();
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CInterfaceExprValue::UserType: // Yoyo: don't care UserType...
|
||||||
|
default:
|
||||||
|
ls.pushNil();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ls.pushNil();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::runExpr(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_runExpr)
|
||||||
|
CLuaStackChecker lsc(&ls, 1);
|
||||||
|
|
||||||
|
// params: "expr".
|
||||||
|
// return: any of: nil, bool, string, number, RGBA, UCString
|
||||||
|
CLuaIHM::checkArgCount(ls, "runExpr", 1);
|
||||||
|
CLuaIHM::check(ls, ls.isString(1), "runExpr() requires a string in param 1");
|
||||||
|
|
||||||
|
// retrieve args
|
||||||
|
std::string expr;
|
||||||
|
ls.toString(1, expr);
|
||||||
|
|
||||||
|
// run expression and push result
|
||||||
|
return runExprAndPushResult(ls, expr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::runFct(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_runFct)
|
||||||
|
CLuaStackChecker lsc(&ls, 1);
|
||||||
|
|
||||||
|
// params: "expr", param1, param2...
|
||||||
|
// return: any of: nil, bool, string, number, RGBA, UCString
|
||||||
|
CLuaIHM::checkArgMin(ls, "runFct", 1);
|
||||||
|
CLuaIHM::check(ls, ls.isString(1), "runExpr() requires a string in param 1");
|
||||||
|
|
||||||
|
// retrieve fct
|
||||||
|
std::string expr;
|
||||||
|
ls.toString(1, expr);
|
||||||
|
expr+= "(";
|
||||||
|
|
||||||
|
// retrieve params
|
||||||
|
uint top= ls.getTop();
|
||||||
|
for(uint i=2;i<=top;i++)
|
||||||
|
{
|
||||||
|
if(i>2)
|
||||||
|
expr+= ", ";
|
||||||
|
|
||||||
|
// If it is a number
|
||||||
|
if(ls.type(i)==LUA_TNUMBER)
|
||||||
|
{
|
||||||
|
std::string paramValue;
|
||||||
|
ls.toString(i, paramValue); // nb: transformed to a string in the stack
|
||||||
|
expr+= paramValue;
|
||||||
|
}
|
||||||
|
// else suppose a string
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// must enclose with "'"
|
||||||
|
std::string paramValue;
|
||||||
|
ls.toString(i, paramValue);
|
||||||
|
expr+= std::string("'") + paramValue + std::string("'") ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// end fct call
|
||||||
|
expr+= ")";
|
||||||
|
|
||||||
|
|
||||||
|
// run expression and push result
|
||||||
|
return runExprAndPushResult(ls, expr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::runCommand(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_runCommand)
|
||||||
|
CLuaStackChecker lsc(&ls, 1);
|
||||||
|
if (ls.empty())
|
||||||
|
{
|
||||||
|
nlwarning("'runCommand' : Command name expected");
|
||||||
|
ls.push(false);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
const char *commandName = ls.toString(1);
|
||||||
|
if (!commandName)
|
||||||
|
{
|
||||||
|
nlwarning("'runCommand' : Bad command name");
|
||||||
|
ls.push(false);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (!NLMISC::ICommand::LocalCommands || !NLMISC::ICommand::LocalCommands->count(ls.toString(1)))
|
||||||
|
{
|
||||||
|
nlwarning("'runCommand' : Command %s not found", ls.toString(1));
|
||||||
|
ls.push(false);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
std::string rawCommandString = ls.toString(1);
|
||||||
|
NLMISC::ICommand *command = (*NLMISC::ICommand::LocalCommands)[ls.toString(1)];
|
||||||
|
nlassert(command);
|
||||||
|
std::vector<std::string> args(ls.getTop() - 1);
|
||||||
|
for(uint k = 2; k <= (uint) ls.getTop(); ++k)
|
||||||
|
{
|
||||||
|
if (ls.toString(k))
|
||||||
|
{
|
||||||
|
args[k - 2] = ls.toString(k);
|
||||||
|
rawCommandString += " " + std::string(ls.toString(k));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ls.push(command->execute(rawCommandString, args, NLMISC::ErrorLog(), false, true));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::isUCString(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_isUCString)
|
||||||
|
const char *funcName = "isUCString";
|
||||||
|
CLuaIHM::checkArgCount(ls, funcName, 1);
|
||||||
|
ls.push(CLuaIHM::isUCStringOnStack(ls, 1));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::concatUCString(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_concatUCString)
|
||||||
|
const char *funcName = "concatUCString";
|
||||||
|
ucstring result;
|
||||||
|
for (uint k = 1; k <= (uint) ls.getTop(); ++k)
|
||||||
|
{
|
||||||
|
//nlwarning("arg %d = %s", k, ls.getTypename(ls.type(k)));
|
||||||
|
ucstring part;
|
||||||
|
if (ls.isString(k))
|
||||||
|
{
|
||||||
|
part.fromUtf8(ls.toString(k));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CLuaIHM::checkArgTypeUCString(ls, funcName, k);
|
||||||
|
nlverify(CLuaIHM::getUCStringOnStack(ls, k, part));
|
||||||
|
}
|
||||||
|
result += part;
|
||||||
|
}
|
||||||
|
CLuaIHM::push(ls, result);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::concatString(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_concatUCString)
|
||||||
|
const char *funcName = "concatString";
|
||||||
|
std::string result;
|
||||||
|
uint stackSize = ls.getTop();
|
||||||
|
for (uint k = 1; k <= stackSize; ++k)
|
||||||
|
{
|
||||||
|
CLuaIHM::checkArgType(ls, funcName, k, LUA_TSTRING);
|
||||||
|
result += ls.toString(k);
|
||||||
|
}
|
||||||
|
ls.push(result);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
int CLuaIHM::tableToString(CLuaState &ls)
|
||||||
|
{
|
||||||
|
const char *funcName = "tableToString";
|
||||||
|
CLuaIHM::checkArgCount(ls, funcName, 1);
|
||||||
|
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TTABLE);
|
||||||
|
uint length = 0;
|
||||||
|
// compute size
|
||||||
|
ls.pushNil();
|
||||||
|
while (ls.next(-2))
|
||||||
|
{
|
||||||
|
ls.toString(-1);
|
||||||
|
length += (uint)ls.strlen(-1);
|
||||||
|
ls.pop(2);
|
||||||
|
}
|
||||||
|
std::string result;
|
||||||
|
result.resize(length);
|
||||||
|
char *dest = &result[0];
|
||||||
|
// concatenate
|
||||||
|
ls.pushNil();
|
||||||
|
while (ls.next(-2))
|
||||||
|
{
|
||||||
|
uint length = (uint)ls.strlen(-1);
|
||||||
|
if (length)
|
||||||
|
{
|
||||||
|
memcpy(dest, ls.toString(-1), length);
|
||||||
|
}
|
||||||
|
dest += length;
|
||||||
|
ls.pop(2);
|
||||||
|
}
|
||||||
|
ls.push(result);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int CLuaIHM::getPathContent(CLuaState &ls)
|
||||||
|
{
|
||||||
|
//H_AUTO(Lua_CLuaIHM_getPathContent)
|
||||||
|
const char *funcName = "getPathContent";
|
||||||
|
CLuaIHM::checkArgCount(ls, funcName, 1);
|
||||||
|
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
|
||||||
|
std::vector<std::string> files;
|
||||||
|
NLMISC::CPath::getPathContent(ls.toString(1), false, false, true, files);
|
||||||
|
ls.newTable();
|
||||||
|
for(uint k = 0; k < files.size(); ++k)
|
||||||
|
{
|
||||||
|
ls.push((double) k);
|
||||||
|
ls.push(files[k]);
|
||||||
|
ls.setTable(-3);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
void CLuaIHM::luaValueFromReflectedProperty(CLuaState &ls, CReflectable &reflectedObject, const CReflectedProperty &property)
|
void CLuaIHM::luaValueFromReflectedProperty(CLuaState &ls, CReflectable &reflectedObject, const CReflectedProperty &property)
|
||||||
{
|
{
|
||||||
|
@ -972,6 +1585,28 @@ namespace NLGUI
|
||||||
|
|
||||||
|
|
||||||
// *** Register Functions
|
// *** Register Functions
|
||||||
|
ls.registerFunc("setOnDraw", setOnDraw);
|
||||||
|
ls.registerFunc("setCaptureKeyboard", setCaptureKeyboard);
|
||||||
|
ls.registerFunc("resetCaptureKeyboard", resetCaptureKeyboard);
|
||||||
|
ls.registerFunc("setTopWindow", setTopWindow);
|
||||||
|
ls.registerFunc("addOnDbChange", addOnDbChange);
|
||||||
|
ls.registerFunc("removeOnDbChange", removeOnDbChange);
|
||||||
|
ls.registerFunc("getUIId", getUIId);
|
||||||
|
ls.registerFunc("runAH", runAH);
|
||||||
|
ls.registerFunc("deleteUI", deleteUI);
|
||||||
|
ls.registerFunc("deleteReflectable", deleteReflectable);
|
||||||
|
ls.registerFunc("getWindowSize", getWindowSize);
|
||||||
|
ls.registerFunc("getTextureSize", getTextureSize);
|
||||||
|
ls.registerFunc("disableModalWindow", disableModalWindow);
|
||||||
|
ls.registerFunc("isUCString", isUCString);
|
||||||
|
ls.registerFunc("concatUCString", concatUCString);
|
||||||
|
ls.registerFunc("concatString", concatString);
|
||||||
|
ls.registerFunc("tableToString", tableToString);
|
||||||
|
ls.registerFunc("getCurrentWindowUnder", getCurrentWindowUnder);
|
||||||
|
ls.registerFunc("runExpr", runExpr);
|
||||||
|
ls.registerFunc("runFct", runFct);
|
||||||
|
ls.registerFunc("runCommand", runCommand);
|
||||||
|
ls.registerFunc("getPathContent", getPathContent);
|
||||||
|
|
||||||
// Through LUABind API
|
// Through LUABind API
|
||||||
lua_State *L= ls.getStatePointer();
|
lua_State *L= ls.getStatePointer();
|
||||||
|
@ -990,7 +1625,8 @@ namespace NLGUI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
luabind::def("fileLookup", CMiscFunctions::fileLookup),
|
luabind::def("fileLookup", CMiscFunctions::fileLookup),
|
||||||
luabind::def("shellExecute", CMiscFunctions::shellExecute)
|
luabind::def("shellExecute", CMiscFunctions::shellExecute),
|
||||||
|
LUABIND_FUNC(fileExists)
|
||||||
];
|
];
|
||||||
|
|
||||||
// inside i18n table
|
// inside i18n table
|
||||||
|
|
|
@ -362,55 +362,33 @@ void CLuaIHMRyzom::RegisterRyzomFunctions( NLGUI::CLuaState &ls )
|
||||||
globals.setNil("__cfmt"); // remove temp metatable
|
globals.setNil("__cfmt"); // remove temp metatable
|
||||||
|
|
||||||
ls.registerFunc( "getUI", getUI );
|
ls.registerFunc( "getUI", getUI );
|
||||||
ls.registerFunc("setOnDraw", setOnDraw);
|
|
||||||
ls.registerFunc("setCaptureKeyboard", setCaptureKeyboard);
|
|
||||||
ls.registerFunc("resetCaptureKeyboard", resetCaptureKeyboard);
|
|
||||||
ls.registerFunc("validMessageBox", validMessageBox);
|
ls.registerFunc("validMessageBox", validMessageBox);
|
||||||
ls.registerFunc("setTopWindow", setTopWindow);
|
|
||||||
ls.registerFunc("concatUCString", concatUCString);
|
|
||||||
ls.registerFunc("concatString", concatString);
|
|
||||||
ls.registerFunc("tableToString", tableToString);
|
|
||||||
ls.registerFunc("addOnDbChange", addOnDbChange);
|
|
||||||
ls.registerFunc("removeOnDbChange", removeOnDbChange);
|
|
||||||
ls.registerFunc("getUICaller", getUICaller);
|
ls.registerFunc("getUICaller", getUICaller);
|
||||||
ls.registerFunc("getCurrentWindowUnder", getCurrentWindowUnder);
|
|
||||||
ls.registerFunc("getUI", getUI);
|
ls.registerFunc("getUI", getUI);
|
||||||
ls.registerFunc("getIndexInDB", getIndexInDB);
|
ls.registerFunc("getIndexInDB", getIndexInDB);
|
||||||
ls.registerFunc("getUIId", getUIId);
|
|
||||||
ls.registerFunc("createGroupInstance", createGroupInstance);
|
ls.registerFunc("createGroupInstance", createGroupInstance);
|
||||||
ls.registerFunc("createRootGroupInstance", createRootGroupInstance);
|
ls.registerFunc("createRootGroupInstance", createRootGroupInstance);
|
||||||
ls.registerFunc("createUIElement", createUIElement);
|
ls.registerFunc("createUIElement", createUIElement);
|
||||||
ls.registerFunc("launchContextMenuInGame", launchContextMenuInGame);
|
ls.registerFunc("launchContextMenuInGame", launchContextMenuInGame);
|
||||||
ls.registerFunc("parseInterfaceFromString", parseInterfaceFromString);
|
ls.registerFunc("parseInterfaceFromString", parseInterfaceFromString);
|
||||||
ls.registerFunc("updateAllLocalisedElements", updateAllLocalisedElements);
|
ls.registerFunc("updateAllLocalisedElements", updateAllLocalisedElements);
|
||||||
ls.registerFunc("runAH", runAH);
|
|
||||||
ls.registerFunc("runExpr", runExpr);
|
|
||||||
ls.registerFunc("runFct", runFct);
|
|
||||||
ls.registerFunc("runCommand", runCommand);
|
|
||||||
ls.registerFunc("formatUI", formatUI);
|
ls.registerFunc("formatUI", formatUI);
|
||||||
ls.registerFunc("formatDB", formatDB);
|
ls.registerFunc("formatDB", formatDB);
|
||||||
ls.registerFunc("deleteUI", deleteUI);
|
|
||||||
ls.registerFunc("deleteReflectable", deleteReflectable);
|
|
||||||
ls.registerFunc("dumpUI", dumpUI);
|
ls.registerFunc("dumpUI", dumpUI);
|
||||||
ls.registerFunc("setKeyboardContext", setKeyboardContext);
|
ls.registerFunc("setKeyboardContext", setKeyboardContext);
|
||||||
ls.registerFunc("breakPoint", breakPoint);
|
ls.registerFunc("breakPoint", breakPoint);
|
||||||
ls.registerFunc("getWindowSize", getWindowSize);
|
|
||||||
ls.registerFunc("setTextFormatTaged", setTextFormatTaged);
|
ls.registerFunc("setTextFormatTaged", setTextFormatTaged);
|
||||||
ls.registerFunc("initEmotesMenu", initEmotesMenu);
|
ls.registerFunc("initEmotesMenu", initEmotesMenu);
|
||||||
ls.registerFunc("isUCString", isUCString);
|
|
||||||
ls.registerFunc("hideAllWindows", hideAllWindows);
|
ls.registerFunc("hideAllWindows", hideAllWindows);
|
||||||
ls.registerFunc("hideAllNonSavableWindows", hideAllNonSavableWindows);
|
ls.registerFunc("hideAllNonSavableWindows", hideAllNonSavableWindows);
|
||||||
ls.registerFunc("getDesktopIndex", getDesktopIndex);
|
ls.registerFunc("getDesktopIndex", getDesktopIndex);
|
||||||
ls.registerFunc("setLuaBreakPoint", setLuaBreakPoint);
|
ls.registerFunc("setLuaBreakPoint", setLuaBreakPoint);
|
||||||
ls.registerFunc("getMainPageURL", getMainPageURL);
|
ls.registerFunc("getMainPageURL", getMainPageURL);
|
||||||
ls.registerFunc("getCharSlot", getCharSlot);
|
ls.registerFunc("getCharSlot", getCharSlot);
|
||||||
ls.registerFunc("getPathContent", getPathContent);
|
|
||||||
ls.registerFunc("getServerSeason", getServerSeason);
|
ls.registerFunc("getServerSeason", getServerSeason);
|
||||||
ls.registerFunc("computeCurrSeason", computeCurrSeason);
|
ls.registerFunc("computeCurrSeason", computeCurrSeason);
|
||||||
ls.registerFunc("getAutoSeason", getAutoSeason);
|
ls.registerFunc("getAutoSeason", getAutoSeason);
|
||||||
ls.registerFunc("getTextureSize", getTextureSize);
|
|
||||||
ls.registerFunc("enableModalWindow", enableModalWindow);
|
ls.registerFunc("enableModalWindow", enableModalWindow);
|
||||||
ls.registerFunc("disableModalWindow", disableModalWindow);
|
|
||||||
ls.registerFunc("getPlayerPos", getPlayerPos);
|
ls.registerFunc("getPlayerPos", getPlayerPos);
|
||||||
ls.registerFunc("getPlayerFront", getPlayerFront);
|
ls.registerFunc("getPlayerFront", getPlayerFront);
|
||||||
ls.registerFunc("getPlayerDirection", getPlayerDirection);
|
ls.registerFunc("getPlayerDirection", getPlayerDirection);
|
||||||
|
@ -497,7 +475,6 @@ void CLuaIHMRyzom::RegisterRyzomFunctions( NLGUI::CLuaState &ls )
|
||||||
LUABIND_FUNC(getFirstTribeFameIndex),
|
LUABIND_FUNC(getFirstTribeFameIndex),
|
||||||
LUABIND_FUNC(getNbTribeFameIndex),
|
LUABIND_FUNC(getNbTribeFameIndex),
|
||||||
LUABIND_FUNC(getClientCfg),
|
LUABIND_FUNC(getClientCfg),
|
||||||
LUABIND_FUNC(fileExists),
|
|
||||||
LUABIND_FUNC(sendMsgToServer),
|
LUABIND_FUNC(sendMsgToServer),
|
||||||
LUABIND_FUNC(sendMsgToServerPvpTag),
|
LUABIND_FUNC(sendMsgToServerPvpTag),
|
||||||
LUABIND_FUNC(isGuildQuitAvailable),
|
LUABIND_FUNC(isGuildQuitAvailable),
|
||||||
|
@ -611,260 +588,6 @@ int CLuaIHMRyzom::getUI(CLuaState &ls)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::setCaptureKeyboard(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_setCaptureKeyboard)
|
|
||||||
const char *funcName = "setCaptureKeyboard";
|
|
||||||
CLuaIHM::checkArgCount(ls, funcName, 1);
|
|
||||||
CLuaIHM::checkArgTypeUIElement(ls, funcName, 1);
|
|
||||||
CCtrlBase *ctrl = dynamic_cast<CCtrlBase *>( CLuaIHM::getUIOnStack(ls, 1));
|
|
||||||
if (!ctrl)
|
|
||||||
{
|
|
||||||
CLuaIHM::fails(ls, "%s waits a ui control as arg 1", funcName);
|
|
||||||
}
|
|
||||||
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
||||||
CWidgetManager::getInstance()->setCaptureKeyboard(ctrl);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::resetCaptureKeyboard(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_resetCaptureKeyboard)
|
|
||||||
const char *funcName = "resetCaptureKeyboard";
|
|
||||||
CLuaIHM::checkArgCount(ls, funcName, 0);
|
|
||||||
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
||||||
CWidgetManager::getInstance()->resetCaptureKeyboard();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::setOnDraw(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_setOnDraw)
|
|
||||||
CLuaStackChecker lsc(&ls, 0);
|
|
||||||
|
|
||||||
// params: CInterfaceGroup*, "script".
|
|
||||||
// return: none
|
|
||||||
CLuaIHM::checkArgCount(ls, "setOnDraw", 2);
|
|
||||||
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "setOnDraw() requires a UI object in param 1");
|
|
||||||
CLuaIHM::check(ls, ls.isString(2), "setOnDraw() requires a string in param 2");
|
|
||||||
|
|
||||||
// retrieve args
|
|
||||||
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
|
||||||
std::string script;
|
|
||||||
ls.toString(2, script);
|
|
||||||
|
|
||||||
// must be a group
|
|
||||||
CInterfaceGroup *group= dynamic_cast<CInterfaceGroup*>(pIE);
|
|
||||||
if(!group)
|
|
||||||
throw ELuaIHMException("setOnDraw(): '%s' is not a group", pIE->getId().c_str());
|
|
||||||
// Set the script to be executed at each draw
|
|
||||||
group->setLuaScriptOnDraw(script);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::addOnDbChange(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_addOnDbChange)
|
|
||||||
CLuaStackChecker lsc(&ls, 0);
|
|
||||||
|
|
||||||
// params: CInterfaceGroup*, "dblist", "script".
|
|
||||||
// return: none
|
|
||||||
CLuaIHM::checkArgCount(ls, "addOnDbChange", 3);
|
|
||||||
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "addOnDbChange() requires a UI object in param 1");
|
|
||||||
CLuaIHM::check(ls, ls.isString(2), "addOnDbChange() requires a string in param 2");
|
|
||||||
CLuaIHM::check(ls, ls.isString(3), "addOnDbChange() requires a string in param 3");
|
|
||||||
|
|
||||||
// retrieve args
|
|
||||||
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
|
||||||
std::string dbList, script;
|
|
||||||
ls.toString(2, dbList);
|
|
||||||
ls.toString(3, script);
|
|
||||||
|
|
||||||
// must be a group
|
|
||||||
CInterfaceGroup *group= dynamic_cast<CInterfaceGroup*>(pIE);
|
|
||||||
if(!group)
|
|
||||||
throw ELuaIHMException("addOnDbChange(): '%s' is not a group", pIE->getId().c_str());
|
|
||||||
// Set the script to be executed when the given DB change
|
|
||||||
group->addLuaScriptOnDBChange(dbList, script);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::removeOnDbChange(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_removeOnDbChange)
|
|
||||||
CLuaStackChecker lsc(&ls, 0);
|
|
||||||
|
|
||||||
// params: CInterfaceGroup*, "dbList"
|
|
||||||
// return: none
|
|
||||||
CLuaIHM::checkArgCount(ls, "removeOnDbChange", 2);
|
|
||||||
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "removeOnDbChange() requires a UI object in param 1");
|
|
||||||
CLuaIHM::check(ls, ls.isString(2), "removeOnDbChange() requires a string in param 2");
|
|
||||||
|
|
||||||
// retrieve args
|
|
||||||
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
|
||||||
std::string dbList;
|
|
||||||
ls.toString(2, dbList);
|
|
||||||
|
|
||||||
// must be a group
|
|
||||||
CInterfaceGroup *group= dynamic_cast<CInterfaceGroup*>(pIE);
|
|
||||||
if(!group)
|
|
||||||
throw ELuaIHMException("removeOnDbChange(): '%s' is not a group", pIE->getId().c_str());
|
|
||||||
// Remove the script to be executed when the given DB change
|
|
||||||
group->removeLuaScriptOnDBChange(dbList);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::runAH(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_runAH)
|
|
||||||
CLuaStackChecker lsc(&ls, 0);
|
|
||||||
|
|
||||||
// params: CInterfaceElement *, "ah", "params".
|
|
||||||
// return: none
|
|
||||||
CLuaIHM::checkArgCount(ls, "runAH", 3);
|
|
||||||
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1) || ls.isNil(1), "runAH() requires a UI object in param 1 (or Nil)");
|
|
||||||
CLuaIHM::check(ls, ls.isString(2), "runAH() requires a string in param 2");
|
|
||||||
CLuaIHM::check(ls, ls.isString(3), "runAH() requires a string in param 3");
|
|
||||||
|
|
||||||
// retrieve args
|
|
||||||
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
|
||||||
std::string ah, params;
|
|
||||||
ls.toString(2, ah);
|
|
||||||
ls.toString(3, params);
|
|
||||||
|
|
||||||
// run AH
|
|
||||||
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
||||||
// The element must be ctrl (or NULL)
|
|
||||||
CCtrlBase *ctrl= NULL;
|
|
||||||
if(pIE)
|
|
||||||
{
|
|
||||||
ctrl= dynamic_cast<CCtrlBase*>(pIE);
|
|
||||||
if(!ctrl)
|
|
||||||
throw ELuaIHMException("runAH(): '%s' is not a ctrl", pIE->getId().c_str());
|
|
||||||
}
|
|
||||||
CAHManager::getInstance()->runActionHandler(ah, ctrl, params);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::runExpr(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_runExpr)
|
|
||||||
CLuaStackChecker lsc(&ls, 1);
|
|
||||||
|
|
||||||
// params: "expr".
|
|
||||||
// return: any of: nil, bool, string, number, RGBA, UCString
|
|
||||||
CLuaIHM::checkArgCount(ls, "runExpr", 1);
|
|
||||||
CLuaIHM::check(ls, ls.isString(1), "runExpr() requires a string in param 1");
|
|
||||||
|
|
||||||
// retrieve args
|
|
||||||
std::string expr;
|
|
||||||
ls.toString(1, expr);
|
|
||||||
|
|
||||||
// run expression and push result
|
|
||||||
return runExprAndPushResult(ls, expr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::runFct(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_runFct)
|
|
||||||
CLuaStackChecker lsc(&ls, 1);
|
|
||||||
|
|
||||||
// params: "expr", param1, param2...
|
|
||||||
// return: any of: nil, bool, string, number, RGBA, UCString
|
|
||||||
CLuaIHM::checkArgMin(ls, "runFct", 1);
|
|
||||||
CLuaIHM::check(ls, ls.isString(1), "runExpr() requires a string in param 1");
|
|
||||||
|
|
||||||
// retrieve fct
|
|
||||||
std::string expr;
|
|
||||||
ls.toString(1, expr);
|
|
||||||
expr+= "(";
|
|
||||||
|
|
||||||
// retrieve params
|
|
||||||
uint top= ls.getTop();
|
|
||||||
for(uint i=2;i<=top;i++)
|
|
||||||
{
|
|
||||||
if(i>2)
|
|
||||||
expr+= ", ";
|
|
||||||
|
|
||||||
// If it is a number
|
|
||||||
if(ls.type(i)==LUA_TNUMBER)
|
|
||||||
{
|
|
||||||
std::string paramValue;
|
|
||||||
ls.toString(i, paramValue); // nb: transformed to a string in the stack
|
|
||||||
expr+= paramValue;
|
|
||||||
}
|
|
||||||
// else suppose a string
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// must enclose with "'"
|
|
||||||
std::string paramValue;
|
|
||||||
ls.toString(i, paramValue);
|
|
||||||
expr+= std::string("'") + paramValue + std::string("'") ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// end fct call
|
|
||||||
expr+= ")";
|
|
||||||
|
|
||||||
|
|
||||||
// run expression and push result
|
|
||||||
return runExprAndPushResult(ls, expr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::runCommand(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_runCommand)
|
|
||||||
CLuaStackChecker lsc(&ls, 1);
|
|
||||||
if (ls.empty())
|
|
||||||
{
|
|
||||||
nlwarning("'runCommand' : Command name expected");
|
|
||||||
ls.push(false);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
const char *commandName = ls.toString(1);
|
|
||||||
if (!commandName)
|
|
||||||
{
|
|
||||||
nlwarning("'runCommand' : Bad command name");
|
|
||||||
ls.push(false);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (!NLMISC::ICommand::LocalCommands || !NLMISC::ICommand::LocalCommands->count(ls.toString(1)))
|
|
||||||
{
|
|
||||||
nlwarning("'runCommand' : Command %s not found", ls.toString(1));
|
|
||||||
ls.push(false);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
std::string rawCommandString = ls.toString(1);
|
|
||||||
NLMISC::ICommand *command = (*NLMISC::ICommand::LocalCommands)[ls.toString(1)];
|
|
||||||
nlassert(command);
|
|
||||||
std::vector<std::string> args(ls.getTop() - 1);
|
|
||||||
for(uint k = 2; k <= (uint) ls.getTop(); ++k)
|
|
||||||
{
|
|
||||||
if (ls.toString(k))
|
|
||||||
{
|
|
||||||
args[k - 2] = ls.toString(k);
|
|
||||||
rawCommandString += " " + std::string(ls.toString(k));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ls.push(command->execute(rawCommandString, args, g_log, false, true));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
int CLuaIHMRyzom::formatUI(CLuaState &ls)
|
int CLuaIHMRyzom::formatUI(CLuaState &ls)
|
||||||
|
@ -939,74 +662,6 @@ int CLuaIHMRyzom::formatDB(CLuaState &ls)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::deleteUI(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_deleteUI)
|
|
||||||
CLuaStackChecker lsc(&ls, 0);
|
|
||||||
|
|
||||||
// params: CInterfaceElement *
|
|
||||||
// return: none
|
|
||||||
CLuaIHM::checkArgCount(ls, "deleteUI", 1);
|
|
||||||
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "deleteUI() requires a UI object in param 1");
|
|
||||||
|
|
||||||
// retrieve args
|
|
||||||
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
|
||||||
if(!pIE)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// has a parent?
|
|
||||||
CInterfaceGroup *parent= pIE->getParent();
|
|
||||||
if(parent)
|
|
||||||
{
|
|
||||||
// correctly remove from parent
|
|
||||||
parent->delElement(pIE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// just delete
|
|
||||||
delete pIE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::deleteReflectable(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_deleteReflectable)
|
|
||||||
CLuaStackChecker lsc(&ls, 0);
|
|
||||||
|
|
||||||
// params: CInterfaceElement *
|
|
||||||
// return: none
|
|
||||||
CLuaIHM::checkArgCount(ls, "deleteReflectable", 1);
|
|
||||||
CLuaIHM::check(ls, CLuaIHM::isReflectableOnStack(ls, 1), "deleteReflectable() requires a reflectable C++ object in param 1");
|
|
||||||
|
|
||||||
// retrieve args
|
|
||||||
CReflectableRefPtrTarget *pRPT= CLuaIHM::getReflectableOnStack(ls, 1);
|
|
||||||
if(!pRPT)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
|
||||||
CInterfaceElement *pIE = dynamic_cast<CInterfaceElement *>(pRPT);
|
|
||||||
|
|
||||||
if (pIE)
|
|
||||||
{
|
|
||||||
// has a parent?
|
|
||||||
CInterfaceGroup *parent= pIE->getParent();
|
|
||||||
if(parent)
|
|
||||||
{
|
|
||||||
// correctly remove from parent
|
|
||||||
parent->delElement(pIE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// just delete
|
|
||||||
delete pIE;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
int CLuaIHMRyzom::dumpUI(CLuaState &ls)
|
int CLuaIHMRyzom::dumpUI(CLuaState &ls)
|
||||||
{
|
{
|
||||||
|
@ -1066,97 +721,6 @@ int CLuaIHMRyzom::validMessageBox(CLuaState &ls)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::setTopWindow(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_setTopWindow)
|
|
||||||
const char *funcName = "setTopWindow";
|
|
||||||
CLuaIHM::checkArgCount(ls, funcName, 1);
|
|
||||||
CInterfaceGroup *wnd = dynamic_cast<CInterfaceGroup *>( CLuaIHM::getUIOnStack(ls, 1));
|
|
||||||
if (!wnd)
|
|
||||||
{
|
|
||||||
CLuaIHM::fails(ls, "%s : interface group expected as arg 1", funcName);
|
|
||||||
}
|
|
||||||
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
||||||
CWidgetManager::getInstance()->setTopWindow(wnd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::concatUCString(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_concatUCString)
|
|
||||||
const char *funcName = "concatUCString";
|
|
||||||
ucstring result;
|
|
||||||
for (uint k = 1; k <= (uint) ls.getTop(); ++k)
|
|
||||||
{
|
|
||||||
//nlwarning("arg %d = %s", k, ls.getTypename(ls.type(k)));
|
|
||||||
ucstring part;
|
|
||||||
if (ls.isString(k))
|
|
||||||
{
|
|
||||||
part.fromUtf8(ls.toString(k));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CLuaIHM::checkArgTypeUCString(ls, funcName, k);
|
|
||||||
nlverify(CLuaIHM::getUCStringOnStack(ls, k, part));
|
|
||||||
}
|
|
||||||
result += part;
|
|
||||||
}
|
|
||||||
CLuaIHM::push(ls, result);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::concatString(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_concatUCString)
|
|
||||||
const char *funcName = "concatString";
|
|
||||||
std::string result;
|
|
||||||
uint stackSize = ls.getTop();
|
|
||||||
for (uint k = 1; k <= stackSize; ++k)
|
|
||||||
{
|
|
||||||
CLuaIHM::checkArgType(ls, funcName, k, LUA_TSTRING);
|
|
||||||
result += ls.toString(k);
|
|
||||||
}
|
|
||||||
ls.push(result);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::tableToString(CLuaState &ls)
|
|
||||||
{
|
|
||||||
const char *funcName = "tableToString";
|
|
||||||
CLuaIHM::checkArgCount(ls, funcName, 1);
|
|
||||||
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TTABLE);
|
|
||||||
uint length = 0;
|
|
||||||
// compute size
|
|
||||||
ls.pushNil();
|
|
||||||
while (ls.next(-2))
|
|
||||||
{
|
|
||||||
ls.toString(-1);
|
|
||||||
length += (uint)ls.strlen(-1);
|
|
||||||
ls.pop(2);
|
|
||||||
}
|
|
||||||
std::string result;
|
|
||||||
result.resize(length);
|
|
||||||
char *dest = &result[0];
|
|
||||||
// concatenate
|
|
||||||
ls.pushNil();
|
|
||||||
while (ls.next(-2))
|
|
||||||
{
|
|
||||||
uint length = (uint)ls.strlen(-1);
|
|
||||||
if (length)
|
|
||||||
{
|
|
||||||
memcpy(dest, ls.toString(-1), length);
|
|
||||||
}
|
|
||||||
dest += length;
|
|
||||||
ls.pop(2);
|
|
||||||
}
|
|
||||||
ls.push(result);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
int CLuaIHMRyzom::breakPoint(CLuaState &ls)
|
int CLuaIHMRyzom::breakPoint(CLuaState &ls)
|
||||||
{
|
{
|
||||||
|
@ -1174,21 +738,6 @@ int CLuaIHMRyzom::breakPoint(CLuaState &ls)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::getWindowSize(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_getWindowSize)
|
|
||||||
CLuaIHM::checkArgCount(ls, "getWindowSize", 0);
|
|
||||||
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
||||||
uint32 w, h;
|
|
||||||
CViewRenderer::getInstance()->getScreenSize(w, h);
|
|
||||||
ls.push((double) w);
|
|
||||||
ls.push((double) h);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
int CLuaIHMRyzom::setTextFormatTaged(CLuaState &ls)
|
int CLuaIHMRyzom::setTextFormatTaged(CLuaState &ls)
|
||||||
{
|
{
|
||||||
|
@ -1412,16 +961,6 @@ int CLuaIHMRyzom::initEmotesMenu(CLuaState &ls)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::isUCString(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_isUCString)
|
|
||||||
const char *funcName = "isUCString";
|
|
||||||
CLuaIHM::checkArgCount(ls, funcName, 1);
|
|
||||||
ls.push(CLuaIHM::isUCStringOnStack(ls, 1));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
int CLuaIHMRyzom::hideAllWindows(CLuaState &/* ls */)
|
int CLuaIHMRyzom::hideAllWindows(CLuaState &/* ls */)
|
||||||
{
|
{
|
||||||
|
@ -1486,25 +1025,6 @@ int CLuaIHMRyzom::getCharSlot(CLuaState &ls)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int CLuaIHMRyzom::getPathContent(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_getPathContent)
|
|
||||||
const char *funcName = "getPathContent";
|
|
||||||
CLuaIHM::checkArgCount(ls, funcName, 1);
|
|
||||||
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
|
|
||||||
std::vector<std::string> files;
|
|
||||||
NLMISC::CPath::getPathContent(ls.toString(1), false, false, true, files);
|
|
||||||
ls.newTable();
|
|
||||||
for(uint k = 0; k < files.size(); ++k)
|
|
||||||
{
|
|
||||||
ls.push((double) k);
|
|
||||||
ls.push(files[k]);
|
|
||||||
ls.setTable(-3);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int CLuaIHMRyzom::getServerSeason(CLuaState &ls)
|
int CLuaIHMRyzom::getServerSeason(CLuaState &ls)
|
||||||
{
|
{
|
||||||
//H_AUTO(Lua_CLuaIHM_getServerSeason)
|
//H_AUTO(Lua_CLuaIHM_getServerSeason)
|
||||||
|
@ -1533,27 +1053,6 @@ int CLuaIHMRyzom::getAutoSeason(CLuaState &ls)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int CLuaIHMRyzom::getTextureSize(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_getTextureSize)
|
|
||||||
const char *funcName = "getTextureSize";
|
|
||||||
CLuaIHM::checkArgCount(ls, funcName, 1);
|
|
||||||
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
|
|
||||||
std::string textureName = ls.toString(1);
|
|
||||||
|
|
||||||
CBitmap bitmap;
|
|
||||||
CIFile fs(CPath::lookup(textureName).c_str());
|
|
||||||
bitmap.load(fs);
|
|
||||||
|
|
||||||
ls.push((double) bitmap.getWidth());
|
|
||||||
ls.push((double) bitmap.getHeight());
|
|
||||||
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int CLuaIHMRyzom::enableModalWindow(CLuaState &ls)
|
int CLuaIHMRyzom::enableModalWindow(CLuaState &ls)
|
||||||
{
|
{
|
||||||
//H_AUTO(Lua_CLuaIHM_enableModalWindow)
|
//H_AUTO(Lua_CLuaIHM_enableModalWindow)
|
||||||
|
@ -1592,16 +1091,6 @@ int CLuaIHMRyzom::enableModalWindow(CLuaState &ls)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::disableModalWindow(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_disableModalWindow)
|
|
||||||
CLuaIHM::checkArgCount(ls, "disableModalWindow", 0);
|
|
||||||
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
||||||
CWidgetManager::getInstance()->disableModalWindow();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
int CLuaIHMRyzom::getPlayerPos(CLuaState &ls)
|
int CLuaIHMRyzom::getPlayerPos(CLuaState &ls)
|
||||||
{
|
{
|
||||||
|
@ -1988,47 +1477,6 @@ int CLuaIHMRyzom::getUICaller(CLuaState &ls)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CLuaIHMRyzom::getCurrentWindowUnder(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_getCurrentWindowUnder)
|
|
||||||
CLuaStackChecker lsc(&ls, 1);
|
|
||||||
CInterfaceManager *im = CInterfaceManager::getInstance();
|
|
||||||
CInterfaceElement *pIE= CWidgetManager::getInstance()->getCurrentWindowUnder();
|
|
||||||
if(!pIE)
|
|
||||||
{
|
|
||||||
ls.pushNil();
|
|
||||||
debugInfo(toString("getCurrentWindowUnder(): No UICaller found. return Nil"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CLuaIHM::pushUIOnStack(ls, pIE);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::getUIId(CLuaState &ls)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_getUIId)
|
|
||||||
CLuaStackChecker lsc(&ls, 1);
|
|
||||||
|
|
||||||
// params: CInterfaceElement*
|
|
||||||
// return: "ui:interface:...". (empty if error)
|
|
||||||
CLuaIHM::checkArgCount(ls, "getUIId", 1);
|
|
||||||
CLuaIHM::check(ls, CLuaIHM::isUIOnStack(ls, 1), "getUIId() requires a UI object in param 1");
|
|
||||||
|
|
||||||
// retrieve args
|
|
||||||
CInterfaceElement *pIE= CLuaIHM::getUIOnStack(ls, 1);
|
|
||||||
|
|
||||||
// convert to id
|
|
||||||
if(pIE)
|
|
||||||
ls.push(pIE->getId());
|
|
||||||
else
|
|
||||||
ls.push("");
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
int CLuaIHMRyzom::getIndexInDB(CLuaState &ls)
|
int CLuaIHMRyzom::getIndexInDB(CLuaState &ls)
|
||||||
{
|
{
|
||||||
|
@ -3009,13 +2457,6 @@ string CLuaIHMRyzom::getClientCfg(const string &varName)
|
||||||
return ClientCfg.readString(varName);
|
return ClientCfg.readString(varName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
bool CLuaIHMRyzom::fileExists(const string &fileName)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_fileExists)
|
|
||||||
return CPath::exists(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
void CLuaIHMRyzom::sendMsgToServer(const std::string &sMsg)
|
void CLuaIHMRyzom::sendMsgToServer(const std::string &sMsg)
|
||||||
{
|
{
|
||||||
|
@ -3438,74 +2879,4 @@ std::string CLuaIHMRyzom::createGotoFileButtonTag(const char *fileName, uint lin
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
|
||||||
int CLuaIHMRyzom::runExprAndPushResult(CLuaState &ls, const std::string &expr)
|
|
||||||
{
|
|
||||||
//H_AUTO(Lua_CLuaIHM_runExprAndPushResult)
|
|
||||||
// Execute expression
|
|
||||||
CInterfaceExprValue value;
|
|
||||||
if (CInterfaceExpr::eval(expr, value, NULL))
|
|
||||||
{
|
|
||||||
switch(value.getType())
|
|
||||||
{
|
|
||||||
case CInterfaceExprValue::Boolean:
|
|
||||||
ls.push(value.getBool());
|
|
||||||
break;
|
|
||||||
case CInterfaceExprValue::Integer:
|
|
||||||
ls.push((double)value.getInteger());
|
|
||||||
break;
|
|
||||||
case CInterfaceExprValue::Double:
|
|
||||||
ls.push(value.getDouble());
|
|
||||||
break;
|
|
||||||
case CInterfaceExprValue::String:
|
|
||||||
{
|
|
||||||
ucstring ucstr= value.getUCString();
|
|
||||||
// Yoyo: dynamically decide whether must return a string or a ucstring
|
|
||||||
bool mustUseUCString= false;
|
|
||||||
for (uint i = 0; i < ucstr.size (); i++)
|
|
||||||
{
|
|
||||||
if (ucstr[i] > 255)
|
|
||||||
{
|
|
||||||
mustUseUCString= true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// push a ucstring?
|
|
||||||
if(mustUseUCString)
|
|
||||||
{
|
|
||||||
#if LUABIND_VERSION > 600
|
|
||||||
luabind::detail::push(ls.getStatePointer(), ucstr);
|
|
||||||
#else
|
|
||||||
luabind::object obj(ls.getStatePointer(), ucstr);
|
|
||||||
obj.pushvalue();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ls.push(ucstr.toString());
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case CInterfaceExprValue::RGBA:
|
|
||||||
{
|
|
||||||
CRGBA color = value.getRGBA();
|
|
||||||
#if LUABIND_VERSION > 600
|
|
||||||
luabind::detail::push(ls.getStatePointer(), color);
|
|
||||||
#else
|
|
||||||
luabind::object obj(ls.getStatePointer(), color);
|
|
||||||
obj.pushvalue();
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CInterfaceExprValue::UserType: // Yoyo: don't care UserType...
|
|
||||||
default:
|
|
||||||
ls.pushNil();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ls.pushNil();
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
|
@ -23,13 +23,7 @@ private:
|
||||||
|
|
||||||
static int getUI(CLuaState &ls); // params: "ui:interface:...". return: CInterfaceElement* (nil if error), an additionnal boolean parameter
|
static int getUI(CLuaState &ls); // params: "ui:interface:...". return: CInterfaceElement* (nil if error), an additionnal boolean parameter
|
||||||
// LUA exported Functions with standard lua (because use ui object, use variable param number, or return dynamic-typed object)
|
// LUA exported Functions with standard lua (because use ui object, use variable param number, or return dynamic-typed object)
|
||||||
static int setCaptureKeyboard(CLuaState &ls);
|
|
||||||
static int resetCaptureKeyboard(CLuaState &ls);
|
|
||||||
static int setOnDraw(CLuaState &ls); // params: CInterfaceGroup*, "script". return: none
|
|
||||||
static int addOnDbChange(CLuaState &ls); // params: CInterfaceGroup*, "dblist", "script". return: none
|
|
||||||
static int removeOnDbChange(CLuaState &ls);// params: CInterfaceGroup*. return: none
|
|
||||||
static int getUICaller(CLuaState &ls); // params: none. return: CInterfaceElement* (nil if error)
|
static int getUICaller(CLuaState &ls); // params: none. return: CInterfaceElement* (nil if error)
|
||||||
static int getCurrentWindowUnder(CLuaState &ls); // params: none. return: CInterfaceElement* (nil if none)
|
|
||||||
// can specify verbose display when the element is note found (default is true)
|
// can specify verbose display when the element is note found (default is true)
|
||||||
static int createGroupInstance(CLuaState &ls); // params : param 1 = template name,
|
static int createGroupInstance(CLuaState &ls); // params : param 1 = template name,
|
||||||
// param 2 = id of parent where the instance will be inserted
|
// param 2 = id of parent where the instance will be inserted
|
||||||
|
@ -49,27 +43,16 @@ private:
|
||||||
// param 3 = table with all strings and urls
|
// param 3 = table with all strings and urls
|
||||||
// {"main text"="http:///", "text option 1"="http:///", "text option 2"="http:///") etc...
|
// {"main text"="http:///", "text option 1"="http:///", "text option 2"="http:///") etc...
|
||||||
static int getIndexInDB(CLuaState &ls); // params: CDBCtrlSheet*.... return: index, or 0 if error
|
static int getIndexInDB(CLuaState &ls); // params: CDBCtrlSheet*.... return: index, or 0 if error
|
||||||
static int getUIId(CLuaState &ls); // params: CInterfaceElement*. return: ui id (empty if error)
|
|
||||||
static int runAH(CLuaState &ls); // params: CInterfaceElement *, "ah", "params". return: none
|
|
||||||
static int runExpr(CLuaState &ls); // params: "expr". return: any of: nil,bool,string,number, RGBA, UCString
|
|
||||||
static int runFct(CLuaState &ls); // params: "expr", param1, param2.... return: any of: nil,bool,string,number, RGBA, UCString
|
|
||||||
static int runCommand(CLuaState &ls); // params: "command name", param1, param2 ... return true or false
|
|
||||||
static int formatUI(CLuaState &ls); // params: "expr", param1, param2.... return: string with # and % parsed
|
static int formatUI(CLuaState &ls); // params: "expr", param1, param2.... return: string with # and % parsed
|
||||||
static int formatDB(CLuaState &ls); // params: param1, param2.... return: string with @ and , added
|
static int formatDB(CLuaState &ls); // params: param1, param2.... return: string with @ and , added
|
||||||
static int launchContextMenuInGame(CLuaState &ls); // params : menu name
|
static int launchContextMenuInGame(CLuaState &ls); // params : menu name
|
||||||
static int parseInterfaceFromString(CLuaState &ls); // params : intreface script
|
static int parseInterfaceFromString(CLuaState &ls); // params : intreface script
|
||||||
static int updateAllLocalisedElements(CLuaState &ls);
|
static int updateAllLocalisedElements(CLuaState &ls);
|
||||||
static int breakPoint(CLuaState &ls);
|
static int breakPoint(CLuaState &ls);
|
||||||
static int getWindowSize(CLuaState &ls);
|
|
||||||
static int i18n(CLuaState &ls); // retrieve an unicode string from CI18N
|
static int i18n(CLuaState &ls); // retrieve an unicode string from CI18N
|
||||||
static int setTextFormatTaged(CLuaState &ls); // set a text that may contains Tag Format infos
|
static int setTextFormatTaged(CLuaState &ls); // set a text that may contains Tag Format infos
|
||||||
static int validMessageBox(CLuaState &ls); // ok/cancel type message box (can't get it to work through luabind)
|
static int validMessageBox(CLuaState &ls); // ok/cancel type message box (can't get it to work through luabind)
|
||||||
static int concatUCString(CLuaState &ls); // workaround for + operator that don't work in luabind for ucstrings ...
|
|
||||||
static int concatString(CLuaState &ls); // speedup concatenation of several strings
|
|
||||||
static int tableToString(CLuaState &ls); // concat element of a table to build a string
|
|
||||||
static int setTopWindow(CLuaState &ls); // set the top window
|
|
||||||
static int initEmotesMenu(CLuaState &ls);
|
static int initEmotesMenu(CLuaState &ls);
|
||||||
static int isUCString(CLuaState &ls);
|
|
||||||
static int hideAllWindows(CLuaState &ls);
|
static int hideAllWindows(CLuaState &ls);
|
||||||
static int hideAllNonSavableWindows(CLuaState &ls);
|
static int hideAllNonSavableWindows(CLuaState &ls);
|
||||||
static int getDesktopIndex(CLuaState &ls);
|
static int getDesktopIndex(CLuaState &ls);
|
||||||
|
@ -81,7 +64,6 @@ private:
|
||||||
static int getWeatherValue(CLuaState &ls); // get current real weather value (blend between server driven value & predicted value). Manual weather value is ignored
|
static int getWeatherValue(CLuaState &ls); // get current real weather value (blend between server driven value & predicted value). Manual weather value is ignored
|
||||||
static int disableContextHelpForControl(CLuaState &ls); // params: CCtrlBase*. return: none
|
static int disableContextHelpForControl(CLuaState &ls); // params: CCtrlBase*. return: none
|
||||||
static int disableContextHelp(CLuaState &ls);
|
static int disableContextHelp(CLuaState &ls);
|
||||||
static int getPathContent(CLuaState &ls);
|
|
||||||
static int getServerSeason(CLuaState &ls); // get the last season sent by the server
|
static int getServerSeason(CLuaState &ls); // get the last season sent by the server
|
||||||
// 0->auto, computed locally from the current day (or not received from server yet)
|
// 0->auto, computed locally from the current day (or not received from server yet)
|
||||||
// 1->server force spring
|
// 1->server force spring
|
||||||
|
@ -92,9 +74,7 @@ private:
|
||||||
static int getAutoSeason(CLuaState &ls); // compute automatic season that would be at this time (1->spring, etc .)
|
static int getAutoSeason(CLuaState &ls); // compute automatic season that would be at this time (1->spring, etc .)
|
||||||
|
|
||||||
|
|
||||||
static int getTextureSize(CLuaState &ls);
|
|
||||||
static int enableModalWindow(CLuaState &ls);
|
static int enableModalWindow(CLuaState &ls);
|
||||||
static int disableModalWindow(CLuaState &ls);
|
|
||||||
static int getPlayerPos(CLuaState &ls);
|
static int getPlayerPos(CLuaState &ls);
|
||||||
static int getPlayerFront(CLuaState &ls);
|
static int getPlayerFront(CLuaState &ls);
|
||||||
static int getPlayerDirection(CLuaState &ls);
|
static int getPlayerDirection(CLuaState &ls);
|
||||||
|
@ -120,8 +100,6 @@ private:
|
||||||
static int getSlotDataSetId(CLuaState &ls);
|
static int getSlotDataSetId(CLuaState &ls);
|
||||||
|
|
||||||
// LUA functions exported for Dev only (debug)
|
// LUA functions exported for Dev only (debug)
|
||||||
static int deleteUI(CLuaState &ls); // params: CInterfaceElement*.... return: none
|
|
||||||
static int deleteReflectable(CLuaState &ls); // params: CInterfaceElement*.... return: none
|
|
||||||
static int dumpUI(CLuaState &ls); // params: CInterfaceElement*.... return: none
|
static int dumpUI(CLuaState &ls); // params: CInterfaceElement*.... return: none
|
||||||
static int setKeyboardContext(CLuaState &ls);
|
static int setKeyboardContext(CLuaState &ls);
|
||||||
|
|
||||||
|
@ -206,7 +184,6 @@ private:
|
||||||
static sint32 getFirstTribeFameIndex(); // fame index of the 1st tribe
|
static sint32 getFirstTribeFameIndex(); // fame index of the 1st tribe
|
||||||
static sint32 getNbTribeFameIndex(); // number of tribe fame index (which are contiguous)
|
static sint32 getNbTribeFameIndex(); // number of tribe fame index (which are contiguous)
|
||||||
static std::string getClientCfg(const std::string &varName);
|
static std::string getClientCfg(const std::string &varName);
|
||||||
static bool fileExists(const std::string &fileName);
|
|
||||||
static void sendMsgToServer(const std::string &msgName);
|
static void sendMsgToServer(const std::string &msgName);
|
||||||
static void sendMsgToServerPvpTag(bool pvpTag);
|
static void sendMsgToServerPvpTag(bool pvpTag);
|
||||||
static bool isGuildQuitAvailable();
|
static bool isGuildQuitAvailable();
|
||||||
|
@ -260,8 +237,6 @@ public:
|
||||||
// Requires that 'ClientCfg.LuaDebugInfoGotoButtonEnabled' is set to 1, else
|
// Requires that 'ClientCfg.LuaDebugInfoGotoButtonEnabled' is set to 1, else
|
||||||
// a, empty tag is returned
|
// a, empty tag is returned
|
||||||
static std::string createGotoFileButtonTag(const char *fileName, uint line);
|
static std::string createGotoFileButtonTag(const char *fileName, uint line);
|
||||||
|
|
||||||
static int runExprAndPushResult(CLuaState &ls, const std::string &expr); // Used by runExpr and runFct
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue