205 lines
5.0 KiB
C
205 lines
5.0 KiB
C
|
/** \file
|
||
|
* \brief IupConfig binding to Lua 5.
|
||
|
*
|
||
|
* See Copyright Notice in "iup.h"
|
||
|
*/
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#include <lua.h>
|
||
|
#include <lauxlib.h>
|
||
|
|
||
|
#include "iup.h"
|
||
|
#include "iup_config.h"
|
||
|
|
||
|
#include "iuplua.h"
|
||
|
#include "il.h"
|
||
|
|
||
|
|
||
|
static int Config(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = IupConfig();
|
||
|
iuplua_plugstate(L, ih);
|
||
|
iuplua_pushihandle_raw(L, ih);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int ConfigLoad(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
int ret = IupConfigLoad(ih);
|
||
|
lua_pushinteger(L, ret);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int ConfigSave(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
int ret = IupConfigSave(ih);
|
||
|
lua_pushinteger(L, ret);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int ConfigSetVariable(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
const char *group = luaL_checkstring(L, 2);
|
||
|
const char *key = luaL_checkstring(L, 3);
|
||
|
if (lua_isnil(L, 4))
|
||
|
IupConfigSetVariableStr(ih, group, key, NULL);
|
||
|
else
|
||
|
{
|
||
|
const char *value = luaL_checkstring(L, 4);
|
||
|
IupConfigSetVariableStr(ih, group, key, value);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int ConfigSetVariableId(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
const char *group = luaL_checkstring(L, 2);
|
||
|
const char *key = luaL_checkstring(L, 3);
|
||
|
int id = (int)luaL_checkinteger(L, 4);
|
||
|
if (lua_isnil(L, 5))
|
||
|
IupConfigSetVariableStrId(ih, group, key, id, NULL);
|
||
|
else
|
||
|
{
|
||
|
const char *value = luaL_checkstring(L, 5);
|
||
|
IupConfigSetVariableStrId(ih, group, key, id, value);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int ConfigGetVariable(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
const char *group = luaL_checkstring(L, 2);
|
||
|
const char *key = luaL_checkstring(L, 3);
|
||
|
const char* value = IupConfigGetVariableStr(ih, group, key);
|
||
|
if (!value)
|
||
|
lua_pushnil(L);
|
||
|
else
|
||
|
lua_pushstring(L, value);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int ConfigGetVariableId(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
const char *group = luaL_checkstring(L, 2);
|
||
|
const char *key = luaL_checkstring(L, 3);
|
||
|
int id = (int)luaL_checkinteger(L, 4);
|
||
|
const char* value = IupConfigGetVariableStrId(ih, group, key, id);
|
||
|
if (!value)
|
||
|
lua_pushnil(L);
|
||
|
else
|
||
|
lua_pushstring(L, value);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int ConfigGetVariableDef(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
const char *group = luaL_checkstring(L, 2);
|
||
|
const char *key = luaL_checkstring(L, 3);
|
||
|
const char *def = luaL_optstring(L, 4, NULL);
|
||
|
const char* value = IupConfigGetVariableStrDef(ih, group, key, def);
|
||
|
if (!value)
|
||
|
lua_pushnil(L);
|
||
|
else
|
||
|
lua_pushstring(L, value);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int ConfigGetVariableIdDef(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
const char *group = luaL_checkstring(L, 2);
|
||
|
const char *key = luaL_checkstring(L, 3);
|
||
|
int id = (int)luaL_checkinteger(L, 4);
|
||
|
const char *def = luaL_optstring(L, 4, NULL);
|
||
|
const char* value = IupConfigGetVariableStrIdDef(ih, group, key, id, def);
|
||
|
if (!value)
|
||
|
lua_pushnil(L);
|
||
|
else
|
||
|
lua_pushstring(L, value);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int config_recent_cb(Ihandle* ih)
|
||
|
{
|
||
|
lua_State *L = iuplua_call_start(ih, "recent_cb");
|
||
|
return iuplua_call(L, 0);
|
||
|
}
|
||
|
|
||
|
static int ConfigRecentInit(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
Ihandle* menu = iuplua_checkihandle(L, 2);
|
||
|
int max_recent = (int)luaL_checkinteger(L, 3);
|
||
|
|
||
|
IupConfigRecentInit(ih, menu, config_recent_cb, max_recent);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int ConfigRecentUpdate(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
const char *filename = luaL_checkstring(L, 2);
|
||
|
IupConfigRecentUpdate(ih, filename);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int ConfigDialogShow(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
Ihandle* dialog = iuplua_checkihandle(L, 2);
|
||
|
const char *name = luaL_checkstring(L, 3);
|
||
|
IupConfigDialogShow(ih, dialog, name);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int ConfigDialogClosed(lua_State *L)
|
||
|
{
|
||
|
Ihandle* ih = iuplua_checkihandle(L, 1);
|
||
|
Ihandle* dialog = iuplua_checkihandle(L, 2);
|
||
|
const char *name = luaL_checkstring(L, 3);
|
||
|
IupConfigDialogClosed(ih, dialog, name);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void iupconfiglua_open(lua_State * L)
|
||
|
{
|
||
|
iuplua_register_cb(L, "RECENT_CB", (lua_CFunction)config_recent_cb, NULL);
|
||
|
|
||
|
iuplua_register(L, Config, "Config");
|
||
|
|
||
|
iuplua_register(L, ConfigSetVariable, "ConfigSetVariable");
|
||
|
iuplua_register(L, ConfigSetVariableId, "ConfigSetVariableId");
|
||
|
iuplua_register(L, ConfigGetVariable, "ConfigGetVariable");
|
||
|
iuplua_register(L, ConfigGetVariableId, "ConfigGetVariableId");
|
||
|
iuplua_register(L, ConfigGetVariableDef, "ConfigGetVariableDef");
|
||
|
iuplua_register(L, ConfigGetVariableIdDef, "ConfigGetVariableIdDef");
|
||
|
|
||
|
iuplua_register(L, ConfigLoad, "ConfigLoad");
|
||
|
iuplua_register(L, ConfigSave, "ConfigSave");
|
||
|
|
||
|
iuplua_register(L, ConfigRecentInit, "ConfigRecentInit");
|
||
|
iuplua_register(L, ConfigRecentUpdate, "ConfigRecentUpdate");
|
||
|
|
||
|
iuplua_register(L, ConfigDialogShow, "ConfigDialogShow");
|
||
|
iuplua_register(L, ConfigDialogClosed, "ConfigDialogClosed");
|
||
|
|
||
|
#ifdef IUPLUA_USELOH
|
||
|
#include "iup_config.loh"
|
||
|
#else
|
||
|
#ifdef IUPLUA_USELH
|
||
|
#include "iup_config.lh"
|
||
|
#else
|
||
|
iuplua_dofile(L, "iup_config.lua");
|
||
|
#endif
|
||
|
#endif
|
||
|
}
|