LibreCAD
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
LuaInterface Class Reference

Lua initializer. More...

#include <luainterface.h>

Public Member Functions

 LuaInterface ()
 Create Lua instance. More...
 
 ~LuaInterface ()
 
void initLua ()
 Read and execute Lua files. More...
 
bool luaConnect (QObject *sender, std::string signalName, LuaIntf::LuaRef slot)
 Connect Qt signal with Lua function. More...
 
bool qtConnect (QObject *sender, std::string signalName, QObject *receiver, std::string slotName)
 Connect Qt signal with Qt slot. More...
 
void cleanInvalidQObject ()
 Remove all connections that aren't valid anymore. More...
 
std::vector< std::string > pluginList (const char *path)
 Return a list of plugins. More...
 
void hideUI (bool hidden)
 Hide the window. It needs to be used before initLua(), this is used in unit tests. More...
 
LuaIntf::LuaState luaState ()
 Returns current Lua state. This is used for unit tests. More...
 
LuaIntf::LuaRef operation (unsigned int windowID)
 
void setOperation (unsigned int windowID, LuaIntf::LuaRef)
 
void registerEvent (const std::string &event, LuaIntf::LuaRef callback)
 
void deleteEvent (const std::string &event, LuaIntf::LuaRef callback)
 
void triggerEvent (const std::string &event, LuaIntf::LuaRef args)
 

Static Public Member Functions

static std::shared_ptr< QWidget > loadUiFile (const char *fileName)
 Load Qt widget from .ui file. More...
 
static FILE * openFileDialog (bool isOpening, const char *description, const char *mode)
 

Private Attributes

LuaIntf::LuaState _L
 
std::vector< LuaQObject_SPtr > _luaQObjects
 
lc::PluginManager _pluginManager
 
std::map< unsigned int,
LuaIntf::LuaRef > 
_operations
 
std::map< std::string,
std::vector< LuaIntf::LuaRef > > 
_events
 

Detailed Description

Lua initializer.

Definition at line 29 of file luainterface.h.

Constructor & Destructor Documentation

LuaInterface::LuaInterface ( )

Create Lua instance.

Definition at line 5 of file luainterface.cpp.

5  :
6  _L(LuaIntf::LuaState::newState()),
7  _pluginManager(_L, "gui") {
8 }
lc::PluginManager _pluginManager
Definition: luainterface.h:109
LuaIntf::LuaState _L
Definition: luainterface.h:107
LuaInterface::~LuaInterface ( )

Definition at line 10 of file luainterface.cpp.

10  {
11  _luaQObjects.clear();
12  _operations.clear();
13  _events.clear();
14 
15  lc::LuaCustomEntityManager::getInstance().removePlugins();
16 
17  _L.close();
18 }
LuaIntf::LuaState _L
Definition: luainterface.h:107
std::vector< LuaQObject_SPtr > _luaQObjects
Definition: luainterface.h:108
std::map< unsigned int, LuaIntf::LuaRef > _operations
Definition: luainterface.h:110
std::map< std::string, std::vector< LuaIntf::LuaRef > > _events
Definition: luainterface.h:111

Member Function Documentation

void LuaInterface::cleanInvalidQObject ( )

Remove all connections that aren't valid anymore.

Definition at line 77 of file luainterface.cpp.

77  {
78  _luaQObjects.erase(std::remove_if(_luaQObjects.begin(),
79  _luaQObjects.end(),
80  [](LuaQObject_SPtr lqo){
81  return !lqo->valid();
82  }),
83  _luaQObjects.end());
84 }
std::vector< LuaQObject_SPtr > _luaQObjects
Definition: luainterface.h:108
void LuaInterface::deleteEvent ( const std::string &  event,
LuaIntf::LuaRef  callback 
)

Definition at line 157 of file luainterface.cpp.

157  {
158  auto it = std::find(_events[event].begin(), _events[event].end(), callback);
159 
160  if(it != _events[event].end()) {
161  _events[event].erase(it);
162  }
163 }
std::map< std::string, std::vector< LuaIntf::LuaRef > > _events
Definition: luainterface.h:111
void LuaInterface::hideUI ( bool  hidden)

Hide the window. It needs to be used before initLua(), this is used in unit tests.

Definition at line 100 of file luainterface.cpp.

100  {
101  LuaIntf::Lua::setGlobal(_L, "hideUI", hidden);
102 }
LuaIntf::LuaState _L
Definition: luainterface.h:107
void LuaInterface::initLua ( )

Read and execute Lua files.

Definition at line 20 of file luainterface.cpp.

20  {
21  auto lcLua = lc::LCLua(_L);
22  lcLua.setF_openFileDialog(&LuaInterface::openFileDialog);
23  lcLua.addLuaLibs();
24  lcLua.importLCKernel();
25 
27 
28  LuaIntf::Lua::setGlobal(_L, "luaInterface", this);
29 
30  QString luaFile = QCoreApplication::applicationDirPath() + "/path.lua";
31  int s = _L.doFile(luaFile.toStdString().c_str());
32 
33  if (s != 0) {
34  std::cout << lua_tostring(_L, -1) << std::endl;
35  lua_pop(_L, 1);
36  }
37 
38  _pluginManager.loadPlugins();
39 }
lc::PluginManager _pluginManager
Definition: luainterface.h:109
static FILE * openFileDialog(bool isOpening, const char *description, const char *mode)
void luaOpenQtBridge(lua_State *L)
Definition: qtbridge.cpp:10
LuaIntf::LuaState _L
Definition: luainterface.h:107
std::shared_ptr< QWidget > LuaInterface::loadUiFile ( const char *  fileName)
static

Load Qt widget from .ui file.

Parameters
fileNamefull path to .ui file

Definition at line 65 of file luainterface.cpp.

65  {
66  QUiLoader uiLoader;
67  QFile file(fileName);
68  file.open(QFile::ReadOnly);
69 
70  std::shared_ptr<QWidget> widget(uiLoader.load(&file));
71 
72  file.close();
73 
74  return widget;
75 }
bool LuaInterface::luaConnect ( QObject *  sender,
std::string  signalName,
LuaIntf::LuaRef  slot 
)

Connect Qt signal with Lua function.

Parameters
senderPointer to sender object
signalNameName of the signal with parameters
slotLua function
Returns
true if connected, false if an error happened

Definition at line 41 of file luainterface.cpp.

45 {
46  int signalId = sender->metaObject()->indexOfSignal(signalName.c_str());
47 
48  if(signalId < 0) {
49  std::cout << "No such signal " << signalName << std::endl;
50  }
51  else {
52  auto lqo = std::make_shared<LuaQObject>(sender);
53  _luaQObjects.push_back(lqo);
54 
55  auto connected = lqo->connect(signalId, slot);
56 
58 
59  return connected;
60  }
61 
62  return false;
63 }
void cleanInvalidQObject()
Remove all connections that aren't valid anymore.
std::vector< LuaQObject_SPtr > _luaQObjects
Definition: luainterface.h:108
LuaIntf::LuaState LuaInterface::luaState ( )

Returns current Lua state. This is used for unit tests.

Definition at line 104 of file luainterface.cpp.

104  {
105  return _L;
106 }
LuaIntf::LuaState _L
Definition: luainterface.h:107
FILE * LuaInterface::openFileDialog ( bool  isOpening,
const char *  description,
const char *  mode 
)
static

Definition at line 120 of file luainterface.cpp.

120  {
121  QString path;
122 
123  if(isOpening) {
124  path = QFileDialog::getOpenFileName(nullptr, (std::string("Open ") + description).c_str());
125  }
126  else {
127  path = QFileDialog::getSaveFileName(nullptr, (std::string("Save ") + description).c_str());
128  }
129 
130  if(path.isEmpty()) {
131  return nullptr;
132  }
133 
134  return fopen(path.toStdString().c_str(), mode);
135 }
LuaIntf::LuaRef LuaInterface::operation ( unsigned int  windowID)

Definition at line 137 of file luainterface.cpp.

137  {
138  if(_operations.find(windowID) != _operations.end()) {
139  return _operations[windowID];
140  }
141 
142  return LuaIntf::LuaRef();
143 }
std::map< unsigned int, LuaIntf::LuaRef > _operations
Definition: luainterface.h:110
std::vector< std::string > LuaInterface::pluginList ( const char *  path)

Return a list of plugins.

Parameters
pathPath of plugins
Returns
List of strings containing the name of plugins

Definition at line 108 of file luainterface.cpp.

108  {
109  std::vector<std::string> plugins;
110  QDir dir(path);
111 
112  auto list = dir.entryList(QDir::Filter::Dirs | QDir::Filter::NoDotAndDotDot);
113  for(auto dir : list) {
114  plugins.push_back(dir.toStdString());
115  }
116 
117  return plugins;
118 }
bool LuaInterface::qtConnect ( QObject *  sender,
std::string  signalName,
QObject *  receiver,
std::string  slotName 
)

Connect Qt signal with Qt slot.

Parameters
senderPointer to sender object
signalNameName of the signal with parameters
receiverPointer to receiver object
slotNameName of the slot with parameters

Definition at line 86 of file luainterface.cpp.

86  {
87  int signalId = sender->metaObject()->indexOfSignal(signalName.c_str());
88  if(signalId < 0) {
89  std::cout << "No such signal " << signalName << std::endl;
90  }
91 
92  int slotId = receiver->metaObject()->indexOfSlot(slotName.c_str());
93  if(slotId < 0) {
94  std::cout << "No such slot " << slotName << std::endl;
95  }
96 
97  return QMetaObject::connect(sender, signalId, receiver, slotId);
98 }
void LuaInterface::registerEvent ( const std::string &  event,
LuaIntf::LuaRef  callback 
)

Definition at line 149 of file luainterface.cpp.

149  {
150  if(callback.isTable() && !callback.has("onEvent")) {
151  return;
152  }
153 
154  _events[event].push_back(callback);
155 }
std::map< std::string, std::vector< LuaIntf::LuaRef > > _events
Definition: luainterface.h:111
void LuaInterface::setOperation ( unsigned int  windowID,
LuaIntf::LuaRef  operation 
)

Definition at line 145 of file luainterface.cpp.

145  {
146  _operations[windowID] = operation;
147 }
LuaIntf::LuaRef operation(unsigned int windowID)
std::map< unsigned int, LuaIntf::LuaRef > _operations
Definition: luainterface.h:110
void LuaInterface::triggerEvent ( const std::string &  event,
LuaIntf::LuaRef  args 
)

Definition at line 165 of file luainterface.cpp.

165  {
166  auto events = _events[event];
167  for(auto eventCallback : events) {
168  if(eventCallback.isFunction()) {
169  eventCallback(event, args);
170  }
171  else if(eventCallback.isTable()) {
172  eventCallback.get("onEvent").call(eventCallback, event, args);
173  }
174  }
175 }
std::map< std::string, std::vector< LuaIntf::LuaRef > > _events
Definition: luainterface.h:111

Member Data Documentation

std::map<std::string, std::vector<LuaIntf::LuaRef> > LuaInterface::_events
private

Definition at line 111 of file luainterface.h.

LuaIntf::LuaState LuaInterface::_L
private

Definition at line 107 of file luainterface.h.

std::vector<LuaQObject_SPtr> LuaInterface::_luaQObjects
private

Definition at line 108 of file luainterface.h.

std::map<unsigned int, LuaIntf::LuaRef> LuaInterface::_operations
private

Definition at line 110 of file luainterface.h.

lc::PluginManager LuaInterface::_pluginManager
private

Definition at line 109 of file luainterface.h.


The documentation for this class was generated from the following files: