Add QWidget.setParent()
This commit is contained in:
parent
e653c3ad1d
commit
47b3d514bb
@ -69,13 +69,34 @@
|
|||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
this->instance->dumpObjectInfo(); \
|
this->instance->dumpObjectInfo(); \
|
||||||
return env.Null(); \
|
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
|
#endif // QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE
|
||||||
|
|
||||||
#ifndef QOBJECT_WRAPPED_METHODS_DECLARATION
|
#ifndef QOBJECT_WRAPPED_METHODS_DECLARATION
|
||||||
#define 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
|
#endif // QOBJECT_WRAPPED_METHODS_DECLARATION
|
||||||
|
|
||||||
#ifndef QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE
|
#ifndef QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE
|
||||||
@ -84,13 +105,15 @@
|
|||||||
EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \
|
EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \
|
||||||
\
|
\
|
||||||
InstanceMethod("__id__", &ComponentWrapName::__id__), \
|
InstanceMethod("__id__", &ComponentWrapName::__id__), \
|
||||||
|
InstanceMethod("__external_qobject__", &ComponentWrapName::__external_qobject__), \
|
||||||
InstanceMethod("inherits", &ComponentWrapName::inherits), \
|
InstanceMethod("inherits", &ComponentWrapName::inherits), \
|
||||||
InstanceMethod("setProperty", &ComponentWrapName::setProperty), \
|
InstanceMethod("setProperty", &ComponentWrapName::setProperty), \
|
||||||
InstanceMethod("property", &ComponentWrapName::property), \
|
InstanceMethod("property", &ComponentWrapName::property), \
|
||||||
InstanceMethod("setObjectName", &ComponentWrapName::setObjectName), \
|
InstanceMethod("setObjectName", &ComponentWrapName::setObjectName), \
|
||||||
InstanceMethod("objectName", &ComponentWrapName::objectName), \
|
InstanceMethod("objectName", &ComponentWrapName::objectName), \
|
||||||
InstanceMethod("dumpObjectTree", &ComponentWrapName::dumpObjectTree), \
|
InstanceMethod("dumpObjectTree", &ComponentWrapName::dumpObjectTree), \
|
||||||
InstanceMethod("dumpObjectInfo", &ComponentWrapName::dumpObjectInfo),
|
InstanceMethod("dumpObjectInfo", &ComponentWrapName::dumpObjectInfo), \
|
||||||
|
InstanceMethod("setParent", &ComponentWrapName::setParent),
|
||||||
|
|
||||||
#endif // QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE
|
#endif // QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE
|
||||||
|
|
||||||
@ -109,3 +132,5 @@
|
|||||||
#ifndef QOBJECT_SIGNALS
|
#ifndef QOBJECT_SIGNALS
|
||||||
#define QOBJECT_SIGNALS QOBJECT_SIGNALS_ON_TARGET(this)
|
#define QOBJECT_SIGNALS QOBJECT_SIGNALS_ON_TARGET(this)
|
||||||
#endif // QOBJECT_SIGNALS
|
#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)
|
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
||||||
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
||||||
// doesn't handle any QEvents.
|
// doesn't handle any QEvents.
|
||||||
|
QOBJECT_SET_PARENT_IMPL
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer<QClipboard> instance;
|
QPointer<QClipboard> instance;
|
||||||
|
|||||||
@ -11,6 +11,8 @@
|
|||||||
class DLL_EXPORT QScreenWrap : public Napi::ObjectWrap<QScreenWrap>,
|
class DLL_EXPORT QScreenWrap : public Napi::ObjectWrap<QScreenWrap>,
|
||||||
public EventWidget {
|
public EventWidget {
|
||||||
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
||||||
|
QOBJECT_SET_PARENT_IMPL
|
||||||
|
|
||||||
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
||||||
// doesn't handle any QEvents.
|
// 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
|
// Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class
|
||||||
// doesn't handle any QEvents.
|
// 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:
|
private:
|
||||||
QPointer<QWindow> instance;
|
QPointer<QWindow> instance;
|
||||||
|
|
||||||
|
|||||||
@ -25,9 +25,22 @@
|
|||||||
#ifndef QWIDGET_WRAPPED_METHODS_DECLARATION
|
#ifndef QWIDGET_WRAPPED_METHODS_DECLARATION
|
||||||
#define 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 \
|
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::Value show(const Napi::CallbackInfo& info) { \
|
||||||
Napi::Env env = info.Env(); \
|
Napi::Env env = info.Env(); \
|
||||||
this->instance->show(); \
|
this->instance->show(); \
|
||||||
|
|||||||
@ -12,6 +12,7 @@ class DLL_EXPORT CacheTestQObjectWrap
|
|||||||
: public Napi::ObjectWrap<CacheTestQObjectWrap>,
|
: public Napi::ObjectWrap<CacheTestQObjectWrap>,
|
||||||
public EventWidget {
|
public EventWidget {
|
||||||
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this)
|
||||||
|
QOBJECT_SET_PARENT_IMPL
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer<CacheTestQObject> instance;
|
QPointer<CacheTestQObject> instance;
|
||||||
|
|||||||
@ -27,6 +27,14 @@ export abstract class NodeObject<Signals extends QObjectSignals> extends EventWi
|
|||||||
dumpObjectInfo(): void {
|
dumpObjectInfo(): void {
|
||||||
this.native.dumpObjectInfo();
|
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 {
|
export interface QObjectSignals {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user