From 4499bf05a7a8be460321e87fade3b6b2dd27436a Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 10 Sep 2019 00:06:08 +0200 Subject: [PATCH] Adds take widget for scrollarea and adds geometry getter for widgets --- src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp | 8 ++++++++ src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h | 1 + src/cpp/QtWidgets/QWidget/qwidget_macro.h | 12 ++++++++++++ src/lib/QtWidgets/QScrollArea/index.ts | 13 ++++++++++++- src/lib/QtWidgets/QWidget/index.ts | 11 ++++++++++- 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp index 5e7d330ca..2f6e5f910 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp +++ b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp @@ -46,4 +46,12 @@ Napi::Value QScrollAreaWrap::setWidget(const Napi::CallbackInfo& info) { QWidgetWrap* contentWidgetWrap = Napi::ObjectWrap::Unwrap(contentWidget); this->instance->setWidget(contentWidgetWrap->getInternalInstance()); return env.Null(); +} + +Napi::Value QScrollAreaWrap::takeWidget(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + this->instance->takeWidget(); + // We will not return the value here since we are doing it in js side anyway + return env.Null(); } \ No newline at end of file diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h index a263962dc..26df980f9 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h +++ b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h @@ -17,6 +17,7 @@ class QScrollAreaWrap : public Napi::ObjectWrap{ static Napi::FunctionReference constructor; //wrapped methods Napi::Value setWidget(const Napi::CallbackInfo &info); + Napi::Value takeWidget(const Napi::CallbackInfo &info); QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/QtWidgets/QWidget/qwidget_macro.h b/src/cpp/QtWidgets/QWidget/qwidget_macro.h index f0a8a3729..7e3ae6d7b 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_macro.h +++ b/src/cpp/QtWidgets/QWidget/qwidget_macro.h @@ -154,6 +154,17 @@ Napi::Value setGeometry(const Napi::CallbackInfo& info){ \ this->instance->setGeometry(x, y, width, height); \ return env.Null(); \ } \ +Napi::Value geometry(const Napi::CallbackInfo& info){ \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + QRect geometry = this->instance->geometry(); \ + Napi::Object geometryObj = Napi::Object::New(env); \ + geometryObj.Set("width", geometry.width()); \ + geometryObj.Set("height", geometry.height()); \ + geometryObj.Set("x", geometry.x()); \ + geometryObj.Set("y", geometry.y()); \ + return geometryObj; \ +} \ Napi::Value setMaximumSize(const Napi::CallbackInfo& info){ \ Napi::Env env = info.Env(); \ Napi::HandleScope scope(env); \ @@ -263,6 +274,7 @@ Napi::Value setWindowFlag(const Napi::CallbackInfo& info){ \ InstanceMethod("setEnabled",&WidgetWrapName::setEnabled), \ InstanceMethod("setFixedSize",&WidgetWrapName::setFixedSize), \ InstanceMethod("setGeometry",&WidgetWrapName::setGeometry), \ + InstanceMethod("geometry",&WidgetWrapName::geometry), \ InstanceMethod("setMaximumSize",&WidgetWrapName::setMaximumSize), \ InstanceMethod("setMinimumSize",&WidgetWrapName::setMinimumSize), \ InstanceMethod("repaint",&WidgetWrapName::repaint), \ diff --git a/src/lib/QtWidgets/QScrollArea/index.ts b/src/lib/QtWidgets/QScrollArea/index.ts index 1324f1caf..8ad3090cc 100644 --- a/src/lib/QtWidgets/QScrollArea/index.ts +++ b/src/lib/QtWidgets/QScrollArea/index.ts @@ -9,7 +9,7 @@ export const QScrollAreaEvents = Object.freeze({ }); export class QScrollArea extends QAbstractScrollArea { native: NativeElement; - contentWidget?: NodeWidget; + contentWidget?: NodeWidget | null; constructor(parent?: NodeWidget) { let native; if (parent) { @@ -21,9 +21,20 @@ export class QScrollArea extends QAbstractScrollArea { this.native = native; this.parent = parent; // bind member functions + this.setWidget.bind(this); + this.takeWidget.bind(this); } setWidget(widget: NodeWidget) { this.contentWidget = widget; this.native.setWidget(widget.native); } + takeWidget(): NodeWidget | null { + const contentWidget = this.contentWidget; + this.contentWidget = null; + if (contentWidget) { + this.native.takeWidget(); + return contentWidget; + } + return null; + } } diff --git a/src/lib/QtWidgets/QWidget/index.ts b/src/lib/QtWidgets/QWidget/index.ts index 7349cea40..f4a75c2f9 100644 --- a/src/lib/QtWidgets/QWidget/index.ts +++ b/src/lib/QtWidgets/QWidget/index.ts @@ -45,9 +45,12 @@ export abstract class NodeWidget extends EventWidget { await applyStyleSheet(this, preparedSheet); }; setGeometry = (x: number, y: number, w: number, h: number) => { - // react:✓, //TODO:getter + // react:✓ this.native.setGeometry(x, y, w, h); }; + geometry = (): Rect => { + return this.native.geometry(); + }; setObjectName = (objectName: string) => { // react:✓ this.native.setObjectName(objectName); @@ -148,6 +151,12 @@ export abstract class NodeWidget extends EventWidget { }; } +type Rect = { + x: number; + y: number; + width: number; + height: number; +}; type arg = NodeWidget | NativeElement; export class QWidget extends NodeWidget {