Add QWidget.setParent()
This commit is contained in:
parent
e653c3ad1d
commit
47b3d514bb
@ -69,13 +69,34 @@
|
||||
Napi::Env env = info.Env(); \
|
||||
this->instance->dumpObjectInfo(); \
|
||||
return env.Null(); \
|
||||
} \
|
||||
Napi::Value __external_qobject__(const Napi::CallbackInfo& info) { \
|
||||
Napi::Env env = info.Env(); \
|
||||
return Napi::External<QObject>::New(env, static_cast<QObject *>(this->instance)); \
|
||||
}
|
||||
|
||||
// Ideally this macro below should go in
|
||||
// QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE but some wrappers
|
||||
// need their own setParent()` implementation which handles different
|
||||
// arguments.
|
||||
#define QOBJECT_SET_PARENT_IMPL \
|
||||
Napi::Value setParent(const Napi::CallbackInfo& info) { \
|
||||
Napi::Env env = info.Env(); \
|
||||
if (info[0].IsNull()) { \
|
||||
this->instance->setParent(nullptr); \
|
||||
} else { \
|
||||
QObject* parentObject = info[0].As<Napi::External<QObject>>().Data(); \
|
||||
this->instance->setParent(parentObject); \
|
||||
} \
|
||||
return env.Null(); \
|
||||
}
|
||||
|
||||
#endif // QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE
|
||||
|
||||
#ifndef QOBJECT_WRAPPED_METHODS_DECLARATION
|
||||
#define QOBJECT_WRAPPED_METHODS_DECLARATION \
|
||||
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this->instance.data())
|
||||
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this->instance.data()) \
|
||||
QOBJECT_SET_PARENT_IMPL
|
||||
#endif // QOBJECT_WRAPPED_METHODS_DECLARATION
|
||||
|
||||
#ifndef QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE
|
||||
@ -84,13 +105,15 @@
|
||||
EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \
|
||||
\
|
||||
InstanceMethod("__id__", &ComponentWrapName::__id__), \
|
||||
InstanceMethod("__external_qobject__", &ComponentWrapName::__external_qobject__), \
|
||||
InstanceMethod("inherits", &ComponentWrapName::inherits), \
|
||||
InstanceMethod("setProperty", &ComponentWrapName::setProperty), \
|
||||
InstanceMethod("property", &ComponentWrapName::property), \
|
||||
InstanceMethod("setObjectName", &ComponentWrapName::setObjectName), \
|
||||
InstanceMethod("objectName", &ComponentWrapName::objectName), \
|
||||
InstanceMethod("dumpObjectTree", &ComponentWrapName::dumpObjectTree), \
|
||||
InstanceMethod("dumpObjectInfo", &ComponentWrapName::dumpObjectInfo),
|
||||
InstanceMethod("dumpObjectInfo", &ComponentWrapName::dumpObjectInfo), \
|
||||
InstanceMethod("setParent", &ComponentWrapName::setParent),
|
||||
|
||||
#endif // QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE
|
||||
|
||||
@ -109,3 +132,5 @@
|
||||
#ifndef QOBJECT_SIGNALS
|
||||
#define QOBJECT_SIGNALS QOBJECT_SIGNALS_ON_TARGET(this)
|
||||
#endif // QOBJECT_SIGNALS
|
||||
|
||||
#include "QtCore/QObject/qobject_wrap.h"
|
||||
|
||||
@ -13,6 +13,7 @@ class DLL_EXPORT QClipboardWrap : public Napi::ObjectWrap<QClipboardWrap>,
|
||||
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
||||
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
||||
// doesn't handle any QEvents.
|
||||
QOBJECT_SET_PARENT_IMPL
|
||||
|
||||
private:
|
||||
QPointer<QClipboard> instance;
|
||||
|
||||
@ -11,6 +11,8 @@
|
||||
class DLL_EXPORT QScreenWrap : public Napi::ObjectWrap<QScreenWrap>,
|
||||
public EventWidget {
|
||||
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
||||
QOBJECT_SET_PARENT_IMPL
|
||||
|
||||
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
||||
// doesn't handle any QEvents.
|
||||
|
||||
|
||||
@ -14,6 +14,17 @@ class DLL_EXPORT QWindowWrap : public Napi::ObjectWrap<QWindowWrap>,
|
||||
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
||||
// doesn't handle any QEvents.
|
||||
|
||||
// `QWindow` has a special setParent() which only accepts `QWindow`s
|
||||
Napi::Value setParent(const Napi::CallbackInfo& info) {
|
||||
Napi::Env env = info.Env();
|
||||
QObject* parentObject = info[0].As<Napi::External<QObject>>().Data();
|
||||
QWindow* parentWindow = qobject_cast<QWindow*>(parentObject);
|
||||
if (parentWindow) {
|
||||
this->instance->setParent(parentWindow);
|
||||
}
|
||||
return env.Null();
|
||||
}
|
||||
|
||||
private:
|
||||
QPointer<QWindow> instance;
|
||||
|
||||
|
||||
@ -25,9 +25,22 @@
|
||||
#ifndef QWIDGET_WRAPPED_METHODS_DECLARATION
|
||||
#define QWIDGET_WRAPPED_METHODS_DECLARATION \
|
||||
\
|
||||
QOBJECT_WRAPPED_METHODS_DECLARATION \
|
||||
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this->instance.data()) \
|
||||
YOGAWIDGET_WRAPPED_METHODS_DECLARATION \
|
||||
\
|
||||
Napi::Value setParent(const Napi::CallbackInfo& info) { \
|
||||
Napi::Env env = info.Env(); \
|
||||
if (info[0].IsNull()) { \
|
||||
this->instance->setParent(nullptr); \
|
||||
} else { \
|
||||
QObject* parentObject = info[0].As<Napi::External<QObject>>().Data(); \
|
||||
QWidget* parentWidget = qobject_cast<QWidget*>(parentObject); \
|
||||
if (parentWidget) { \
|
||||
this->instance->setParent(parentWidget); \
|
||||
} \
|
||||
} \
|
||||
return env.Null(); \
|
||||
} \
|
||||
Napi::Value show(const Napi::CallbackInfo& info) { \
|
||||
Napi::Env env = info.Env(); \
|
||||
this->instance->show(); \
|
||||
|
||||
@ -12,6 +12,7 @@ class DLL_EXPORT CacheTestQObjectWrap
|
||||
: public Napi::ObjectWrap<CacheTestQObjectWrap>,
|
||||
public EventWidget {
|
||||
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
||||
QOBJECT_SET_PARENT_IMPL
|
||||
|
||||
private:
|
||||
QPointer<CacheTestQObject> instance;
|
||||
|
||||
@ -27,6 +27,14 @@ export abstract class NodeObject<Signals extends QObjectSignals> extends EventWi
|
||||
dumpObjectInfo(): void {
|
||||
this.native.dumpObjectInfo();
|
||||
}
|
||||
setParent(parent: NodeObject<QObjectSignals>): void {
|
||||
if (parent != null) {
|
||||
const extern = parent.native.__external_qobject__();
|
||||
this.native.setParent(extern);
|
||||
} else {
|
||||
this.native.setParent(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export interface QObjectSignals {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user