diff --git a/src/cpp/include/nodegui/QtCore/QObject/qobject_macro.h b/src/cpp/include/nodegui/QtCore/QObject/qobject_macro.h index b77773d48..8b745f0f3 100644 --- a/src/cpp/include/nodegui/QtCore/QObject/qobject_macro.h +++ b/src/cpp/include/nodegui/QtCore/QObject/qobject_macro.h @@ -109,6 +109,16 @@ Napi::Env env = info.Env(); \ delete static_cast(this->instance); \ return env.Null(); \ + } \ + Napi::Value children(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + QObjectList children = this->instance->children(); \ + Napi::Array resultArrayNapi = Napi::Array::New(env, children.size()); \ + for (int i = 0; i < children.size(); i++) { \ + resultArrayNapi[i] = \ + WrapperCache::instance.getWrapper(env, children[i]); \ + } \ + return resultArrayNapi; \ } // Ideally this macro below should go in @@ -155,7 +165,8 @@ InstanceMethod("killTimer", &ComponentWrapName::killTimer), \ InstanceMethod("parent", &ComponentWrapName::parent), \ InstanceMethod("deleteLater", &ComponentWrapName::deleteLater), \ - InstanceMethod("delete", &ComponentWrapName::deleteObject), + InstanceMethod("delete", &ComponentWrapName::deleteObject), \ + InstanceMethod("children", &ComponentWrapName::children), #endif // QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE diff --git a/src/lib/QtCore/QObject.ts b/src/lib/QtCore/QObject.ts index 53ae0feff..b3b4ad450 100644 --- a/src/lib/QtCore/QObject.ts +++ b/src/lib/QtCore/QObject.ts @@ -70,6 +70,9 @@ export class QObject extends Ev deleteLater(): void { this.native.deleteLater(); } + children(): QObject[] { + return this.native.children().map((kid: any) => wrapperCache.getWrapper(kid)); + } } export interface QObjectSignals { diff --git a/src/lib/core/__test__/WrapperCache.test.ts b/src/lib/core/__test__/WrapperCache.test.ts index ddae7f3cf..342d3f859 100644 --- a/src/lib/core/__test__/WrapperCache.test.ts +++ b/src/lib/core/__test__/WrapperCache.test.ts @@ -82,5 +82,16 @@ describe('WrapperCache using CacheTestQObject', () => { expect(b.native).toBeNull(); }); + it('Object.children()', () => { + wrapperCache._flush(); + const parent = new QObject(); + const kid1 = new QObject(parent); + const kid2 = new QObject(parent); + const allKids = parent.children(); + expect(allKids.length).toBe(2); + expect(allKids[0]).toEqual(kid1); + expect(allKids[1]).toEqual(kid2); + }); + qApp.quit(); });