Add Lua function to check whether a specific module is loaded (closing #36)

This commit is contained in:
Alexander Bock
2016-06-04 19:38:56 +02:00
parent 4409003524
commit 30264fb00e
6 changed files with 92 additions and 13 deletions

View File

@@ -26,6 +26,7 @@
#define __MODULEENGINE_H__
#include <openspace/util/openspacemodule.h>
#include <openspace/scripting/scriptengine.h>
#include <memory>
#include <vector>
@@ -74,6 +75,12 @@ public:
*/
std::vector<OpenSpaceModule*> modules() const;
/**
* Returns the Lua library that contains all Lua functions available to affect the
* modules.
*/
static scripting::ScriptEngine::LuaLibrary luaLibrary();
private:
/// The list of all registered OpenSpaceModule%s
std::vector<std::unique_ptr<OpenSpaceModule>> _modules;

View File

@@ -28,6 +28,7 @@ set(OPENSPACE_SOURCE
${OPENSPACE_BASE_DIR}/src/engine/downloadmanager.cpp
${OPENSPACE_BASE_DIR}/src/engine/logfactory.cpp
${OPENSPACE_BASE_DIR}/src/engine/moduleengine.cpp
${OPENSPACE_BASE_DIR}/src/engine/moduleengine_lua.inl
${OPENSPACE_BASE_DIR}/src/engine/openspaceengine.cpp
${OPENSPACE_BASE_DIR}/src/engine/wrapper/sgctwindowwrapper.cpp
${OPENSPACE_BASE_DIR}/src/engine/wrapper/windowwrapper.cpp

View File

@@ -31,6 +31,8 @@
#include <algorithm>
#include "moduleengine_lua.inl"
namespace {
const std::string _loggerCat = "ModuleEngine";
}
@@ -80,4 +82,19 @@ std::vector<OpenSpaceModule*> ModuleEngine::modules() const {
return result;
}
scripting::ScriptEngine::LuaLibrary ModuleEngine::luaLibrary() {
return {
"modules",
{
{
"isLoaded",
&luascriptfunctions::isLoaded,
"string",
"Checks whether a specific module is loaded"
}
}
};
}
} // namespace openspace

View File

@@ -0,0 +1,65 @@
/*****************************************************************************************
* *
* OpenSpace *
* *
* Copyright (c) 2014-2016 *
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy of this *
* software and associated documentation files (the "Software"), to deal in the Software *
* without restriction, including without limitation the rights to use, copy, modify, *
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to *
* permit persons to whom the Software is furnished to do so, subject to the following *
* conditions: *
* *
* The above copyright notice and this permission notice shall be included in all copies *
* or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A *
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF *
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE *
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
****************************************************************************************/
#include <openspace/engine/openspaceengine.h>
#include <ghoul/lua/ghoul_lua.h>
namespace openspace {
namespace luascriptfunctions {
/**
* \ingroup LuaScripts
* isLoaded(string):
* Checks whether the passed OpenSpaceModule is loaded or not
*/
int isLoaded(lua_State* L) {
int nArguments = lua_gettop(L);
if (nArguments != 1)
return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments);
const int type = lua_type(L, -1);
if (type != LUA_TSTRING)
return luaL_error(L, "Expected argument of type 'string'");
std::string moduleName = lua_tostring(L, -1);
std::vector<OpenSpaceModule*> modules = OsEng.moduleEngine().modules();
auto it = std::find_if(
modules.begin(),
modules.end(),
[moduleName](OpenSpaceModule* module) {
return module->name() == moduleName;
}
);
if (it != modules.end())
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
} // namespace luascriptfunctions
} // namespace openspace

View File

@@ -370,6 +370,7 @@ bool OpenSpaceEngine::initialize() {
_scriptEngine->addLibrary(LuaConsole::luaLibrary());
_scriptEngine->addLibrary(gui::GUI::luaLibrary());
_scriptEngine->addLibrary(network::ParallelConnection::luaLibrary());
_scriptEngine->addLibrary(ModuleEngine::luaLibrary());
#ifdef OPENSPACE_MODULE_ISWA_ENABLED
_scriptEngine->addLibrary(IswaManager::luaLibrary());

View File

@@ -26,18 +26,6 @@ namespace openspace {
namespace luascriptfunctions {
/**
int changeCoordinateSystem(lua_State* L) {
int nArguments = lua_gettop(L);
if (nArguments != 1)
return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments);
std::string newCenter = std::string(lua_tostring(L, -1));
OsEng.renderEngine()->changeViewPoint(newCenter);
return 1;
}
*/
/**
* \ingroup LuaScripts
* takeScreenshot():
@@ -63,7 +51,7 @@ int setRenderer(lua_State* L) {
const int type = lua_type(L, -1);
if (type != LUA_TSTRING)
return luaL_error(L, "Expected argument of type 'bool'");
return luaL_error(L, "Expected argument of type 'string'");
std::string r = lua_tostring(L, -1);
OsEng.renderEngine().setRendererFromString(r);
return 0;