LibreCAD
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
luainterface.h
Go to the documentation of this file.
1 #pragma once
2 
3 extern "C"
4 {
5 #include "lua.h"
6 #include "lualib.h"
7 #include "lauxlib.h"
8 }
9 
10 #include <iostream>
11 
12 #include <QMetaObject>
13 #include <QMetaMethod>
14 #include <QObject>
15 #include <QMainWindow>
16 #include <QFile>
17 #include <QTextStream>
18 #include <QtUiTools/QUiLoader>
19 #include <QCoreApplication>
20 #include <managers/pluginmanager.h>
21 #include "lua/luaqobject.h"
22 
23 #include "lua-intf/LuaIntf/LuaIntf.h"
24 #include "lua/qtbridge.h"
25 
29 class LuaInterface {
30  public:
34  LuaInterface();
35  ~LuaInterface();
36 
40  void initLua();
41 
49  bool luaConnect(
50  QObject* sender,
51  std::string signalName,
52  LuaIntf::LuaRef slot
53  );
54 
62  bool qtConnect(QObject* sender,
63  std::string signalName,
64  QObject* receiver,
65  std::string slotName);
66 
70  void cleanInvalidQObject();
71 
76  static std::shared_ptr<QWidget> loadUiFile(const char* fileName);
77 
83  std::vector<std::string> pluginList(const char* path);
84 
89  void hideUI(bool hidden);
90 
95  LuaIntf::LuaState luaState();
96 
97  static FILE* openFileDialog(bool isOpening, const char* description, const char* mode);
98 
99  LuaIntf::LuaRef operation(unsigned int windowID);
100  void setOperation(unsigned int windowID, LuaIntf::LuaRef);
101 
102  void registerEvent(const std::string& event, LuaIntf::LuaRef callback);
103  void deleteEvent(const std::string& event, LuaIntf::LuaRef callback);
104  void triggerEvent(const std::string& event, LuaIntf::LuaRef args);
105 
106  private:
107  LuaIntf::LuaState _L;
108  std::vector<LuaQObject_SPtr> _luaQObjects;
109  lc::PluginManager _pluginManager;
110  std::map<unsigned int, LuaIntf::LuaRef> _operations;
111  std::map<std::string, std::vector<LuaIntf::LuaRef>> _events;
112 };
lc::PluginManager _pluginManager
Definition: luainterface.h:109
static FILE * openFileDialog(bool isOpening, const char *description, const char *mode)
static std::shared_ptr< QWidget > loadUiFile(const char *fileName)
Load Qt widget from .ui file.
LuaIntf::LuaRef operation(unsigned int windowID)
void cleanInvalidQObject()
Remove all connections that aren't valid anymore.
LuaIntf::LuaState luaState()
Returns current Lua state. This is used for unit tests.
bool luaConnect(QObject *sender, std::string signalName, LuaIntf::LuaRef slot)
Connect Qt signal with Lua function.
LuaIntf::LuaState _L
Definition: luainterface.h:107
LuaInterface()
Create Lua instance.
Definition: luainterface.cpp:5
std::vector< LuaQObject_SPtr > _luaQObjects
Definition: luainterface.h:108
void triggerEvent(const std::string &event, LuaIntf::LuaRef args)
bool qtConnect(QObject *sender, std::string signalName, QObject *receiver, std::string slotName)
Connect Qt signal with Qt slot.
void setOperation(unsigned int windowID, LuaIntf::LuaRef)
void initLua()
Read and execute Lua files.
Lua initializer.
Definition: luainterface.h:29
void registerEvent(const std::string &event, LuaIntf::LuaRef callback)
std::map< unsigned int, LuaIntf::LuaRef > _operations
Definition: luainterface.h:110
void deleteEvent(const std::string &event, LuaIntf::LuaRef callback)
std::map< std::string, std::vector< LuaIntf::LuaRef > > _events
Definition: luainterface.h:111
std::vector< std::string > pluginList(const char *path)
Return a list of plugins.
void hideUI(bool hidden)
Hide the window. It needs to be used before initLua(), this is used in unit tests.