mirror of
https://gitlab.com/eql/EQL5.git
synced 2025-12-15 14:50:58 -08:00
add third argument to 'EQL::addObject' to call 'define-qt-wrappers'
This commit is contained in:
parent
73844d81ab
commit
4f75551971
4 changed files with 35 additions and 22 deletions
|
|
@ -12,13 +12,17 @@ int main(int argc, char* argv[]) {
|
||||||
main->show();
|
main->show();
|
||||||
|
|
||||||
EQL eql;
|
EQL eql;
|
||||||
|
|
||||||
// add desired Qt class instances as Lisp variables (uses 'defvar'):
|
|
||||||
|
|
||||||
EQL::addObject(main, "eql-user:*main-widget*");
|
|
||||||
EQL::addObject(new Test(main), "eql-user:*test*");
|
|
||||||
|
|
||||||
EQL::eval("(in-package :eql-user)");
|
EQL::eval("(in-package :eql-user)");
|
||||||
|
|
||||||
|
// add desired Qt class instances as Lisp variables (uses 'defvar');
|
||||||
|
// you may provide a package name (which needs to exists), otherwise
|
||||||
|
// the current package will be used (see above 'in-package');
|
||||||
|
// pass 'true' as last argument to also call 'define-qt-wrappers'
|
||||||
|
|
||||||
|
EQL::addObject(main, "eql-user:*main-widget*");
|
||||||
|
|
||||||
|
EQL::addObject(new Test(main), "*test*", true); // 'define-qt-wrappers'
|
||||||
|
|
||||||
EQL::eval("(load \"test.lisp\")"); // will start a REPL
|
EQL::eval("(load \"test.lisp\")"); // will start a REPL
|
||||||
app.processEvents(); // needed for 'qlater' in 'test.lisp'
|
app.processEvents(); // needed for 'qlater' in 'test.lisp'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,6 @@
|
||||||
(in-package :eql-user)
|
;;; below function calls only work because 'define-qt-wrappers' has already
|
||||||
|
;;; been called implicitely on '*test*', see 'EQL::addObject()' in 'main.cpp'
|
||||||
;; the following defines generic functions for all Qt signals,
|
;;; (note third argument 'true')
|
||||||
;; Qt slots and functions declared Q_INVOKABLE
|
|
||||||
|
|
||||||
(define-qt-wrappers *test*)
|
|
||||||
|
|
||||||
;; now we can call those functions
|
|
||||||
|
|
||||||
(defun test ()
|
(defun test ()
|
||||||
;; make new instance
|
;; make new instance
|
||||||
|
|
|
||||||
28
src/eql.cpp
28
src/eql.cpp
|
|
@ -215,15 +215,29 @@ void EQL::exec(QWidget* widget, const QString& lispFile, const QString& slimeHoo
|
||||||
if(exec_with_simple_restart) {
|
if(exec_with_simple_restart) {
|
||||||
eval("(eql::exec-with-simple-restart)"); }}
|
eval("(eql::exec-with-simple-restart)"); }}
|
||||||
|
|
||||||
void EQL::addObject(QObject* object, const QByteArray& varName) {
|
void EQL::addObject(QObject* object, const QByteArray& varName, bool defineWrappers) {
|
||||||
|
cl_object l_symbol = ECL_NIL;
|
||||||
int p = varName.indexOf(':');
|
int p = varName.indexOf(':');
|
||||||
QByteArray pkg = (p == -1) ? "eql-user" : varName.left(p);
|
if(p == -1) {
|
||||||
QByteArray var = varName.mid(varName.lastIndexOf(':') + 1);
|
// use current package
|
||||||
cl_object l_symbol = cl_intern(2,
|
l_symbol = cl_intern(1,
|
||||||
STRING_COPY(var.toUpper().constData()),
|
STRING_COPY(varName.toUpper().constData())); }
|
||||||
cl_find_package(STRING_COPY(pkg.toUpper().constData())));
|
else {
|
||||||
|
// use provided package
|
||||||
|
QByteArray pkg = varName.left(p);
|
||||||
|
QByteArray var = varName.mid(varName.lastIndexOf(':') + 1);
|
||||||
|
l_symbol = cl_intern(2,
|
||||||
|
STRING_COPY(var.toUpper().constData()),
|
||||||
|
cl_find_package(STRING_COPY(pkg.toUpper().constData()))); }
|
||||||
cl_object l_object = qt_object_from_name(LObjects::vanillaQtSuperClassName(object->metaObject()), object);
|
cl_object l_object = qt_object_from_name(LObjects::vanillaQtSuperClassName(object->metaObject()), object);
|
||||||
ecl_defvar(l_symbol, l_object); }
|
// 'defvar'
|
||||||
|
ecl_defvar(l_symbol, l_object);
|
||||||
|
if(defineWrappers) {
|
||||||
|
// 'define-qt-wrappers'
|
||||||
|
STATIC_SYMBOL_PKG (s_define_qt_wrappers, "DEFINE-QT-WRAPPERS", "EQL")
|
||||||
|
cl_funcall(2,
|
||||||
|
s_define_qt_wrappers,
|
||||||
|
l_object); }}
|
||||||
|
|
||||||
void EQL::runOnUiThread(void* function_or_closure) {
|
void EQL::runOnUiThread(void* function_or_closure) {
|
||||||
const cl_env_ptr l_env = ecl_process_env();
|
const cl_env_ptr l_env = ecl_process_env();
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public:
|
||||||
static void ini(int, char**);
|
static void ini(int, char**);
|
||||||
static void ini(char**);
|
static void ini(char**);
|
||||||
static void eval(const char*, const EvalMode = evalMode);
|
static void eval(const char*, const EvalMode = evalMode);
|
||||||
static void addObject(QObject*, const QByteArray&);
|
static void addObject(QObject*, const QByteArray&, bool = false);
|
||||||
static EvalMode evalMode;
|
static EvalMode evalMode;
|
||||||
|
|
||||||
void exec(const QStringList&);
|
void exec(const QStringList&);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue