The Battle for Wesnoth  1.15.1+dev
lua_preferences.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2016 - 2018 by Jyrki Vesterinen <sandgtx@gmail.com>
3  * Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY.
11  *
12  * See the COPYING file for more details.
13  */
14 
16 
17 #include "config.hpp"
18 #include "lua/lua.h"
19 #include "lua/lauxlib.h"
20 #include "preferences/general.hpp"
21 #include "scripting/lua_common.hpp"
22 
23 /**
24  * The __index metamethod.
25  * Parameter 1: the preference table.
26  * Parameter 2: preference name, must be a string.
27  * Returns: preference value. If there isn't such a preference, returns nil.
28  */
30 {
31  std::string preference_name = luaL_checkstring(L, 2);
33  return 1;
34 }
35 
36 /**
37  * The __newindex metamethod.
38  * Parameter 1: the preference table.
39  * Parameter 2: preference name, must be a string.
40  * Parameter 3: preference value.
41  * Returns nothing.
42  */
44 {
45  std::string preference_name = luaL_checkstring(L, 2);
47  luaW_toscalar(L, 3, value);
48  preferences::set(preference_name, value);
49  return 0;
50 }
51 
52 namespace lua_preferences
53 {
54  std::string register_table(lua_State* L)
55  {
56  // Push the wesnoth table to the stack
57  lua_getglobal(L, "wesnoth");
58 
59  // Create the preferences table
60  lua_newtable(L);
62  lua_setfield(L, -2, "__index");
64  lua_setfield(L, -2, "__newindex");
65  lua_pushstring(L, "src/scripting/lua_preferences.cpp");
66  lua_setfield(L, -2, "__metatable");
67 
68  // Set the table as its own metatable
69  lua_pushvalue(L, -1);
70  lua_setmetatable(L, -2);
71 
72  // Assign the table to wesnoth.preferences
73  lua_setfield(L, -2, "preferences");
74 
75  // Pop the wesnoth table from the stack
76  lua_pop(L, 1);
77 
78  return "Adding preferences table...\n";
79  }
80 }
#define lua_pushcfunction(L, f)
Definition: lua.h:350
Variant for storing WML attributes.
LUA_API int lua_getglobal(lua_State *L, const char *name)
Definition: lapi.cpp:605
void set(const std::string &key, bool value)
Definition: general.cpp:180
Definitions for the interface to Wesnoth Markup Language (WML).
#define lua_pop(L, n)
Definition: lua.h:344
void luaW_pushscalar(lua_State *L, const config::attribute_value &v)
Converts an attribute value into a Lua object pushed at the top of the stack.
Definition: lua_common.cpp:545
static int impl_preferences_get(lua_State *L)
The __index metamethod.
config::attribute_value get_as_attribute(const std::string &key)
Definition: general.cpp:241
LUA_API int lua_setmetatable(lua_State *L, int objindex)
Definition: lapi.cpp:846
#define lua_newtable(L)
Definition: lua.h:346
static int impl_preferences_set(lua_State *L)
The __newindex metamethod.
LUA_API void lua_pushvalue(lua_State *L, int idx)
Definition: lapi.cpp:237
std::string register_table(lua_State *L)
bool luaW_toscalar(lua_State *L, int index, config::attribute_value &v)
Converts the value at the top of the stack to an attribute value.
Definition: lua_common.cpp:550
LUA_API const char * lua_pushstring(lua_State *L, const char *s)
Definition: lapi.cpp:491
LUA_API void lua_setfield(lua_State *L, int idx, const char *k)
Definition: lapi.cpp:777
#define luaL_checkstring(L, n)
Definition: lauxlib.h:124