From 2359ca8838c625051c80fe7e3fb01b5c3da9ff3c Mon Sep 17 00:00:00 2001 From: feng8848 <40539968+feng8848@users.noreply.github.com> Date: Thu, 12 Mar 2020 23:21:56 +0800 Subject: [PATCH] fix issue #439 (#440) Co-authored-by: wuxiaofeng --- .../QtWidgets/QListWidget/qlistwidget_wrap.h | 3 +- .../QListWidgetItem/qlistwidgetitem_wrap.h | 1 + .../QtCore/QModelIndex/qmodelindex_wrap.cpp | 14 +++++--- .../QListWidgetItem/qlistwidgetitem_wrap.cpp | 32 +++++++++++++------ 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/cpp/include/nodegui/QtWidgets/QListWidget/qlistwidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QListWidget/qlistwidget_wrap.h index ff1f6c8ff..56d30664e 100644 --- a/src/cpp/include/nodegui/QtWidgets/QListWidget/qlistwidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QListWidget/qlistwidget_wrap.h @@ -10,6 +10,7 @@ #include "QtWidgets/QListWidget/nlistwidget.hpp" class DLL_EXPORT QListWidgetWrap : public Napi::ObjectWrap { + QListView_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -42,6 +43,4 @@ class DLL_EXPORT QListWidgetWrap : public Napi::ObjectWrap { Napi::Value visualItemRect(const Napi::CallbackInfo& info); Napi::Value clear(const Napi::CallbackInfo& info); Napi::Value scrollToItem(const Napi::CallbackInfo& info); - - QListView_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.h b/src/cpp/include/nodegui/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.h index e3d3cd315..6e1a2f600 100644 --- a/src/cpp/include/nodegui/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.h @@ -10,6 +10,7 @@ class DLL_EXPORT QListWidgetItemWrap : public Napi::ObjectWrap { private: QListWidgetItem* instance; + bool disableDeletion; public: static Napi::Object init(Napi::Env env, Napi::Object exports); diff --git a/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp b/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp index 7ec55e804..9b2782ef9 100644 --- a/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp +++ b/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp @@ -33,11 +33,17 @@ QModelIndexWrap::QModelIndexWrap(const Napi::CallbackInfo& info) Napi::Env env = info.Env(); Napi::HandleScope scope(env); - if (info.Length() == 0) { - this->instance = std::make_unique(); + if (info.Length() > 0 && info[0].IsExternal()) { + // --- if external --- + this->instance = std::unique_ptr( + info[0].As>().Data()); } else { - Napi::TypeError::New(env, "Wrong number of arguments") - .ThrowAsJavaScriptException(); + if (info.Length() == 0) { + this->instance = std::make_unique(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } } this->rawData = extrautils::configureComponent(this->getInternalInstance()); } diff --git a/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp b/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp index 13e0102ec..930ded64e 100644 --- a/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp @@ -46,22 +46,36 @@ Napi::Object QListWidgetItemWrap::init(Napi::Env env, Napi::Object exports) { QListWidgetItem* QListWidgetItemWrap::getInternalInstance() { return this->instance; } -QListWidgetItemWrap::~QListWidgetItemWrap() { delete this->instance; } + +QListWidgetItemWrap::~QListWidgetItemWrap() { + if (!this->disableDeletion) { + delete this->instance; + } +} QListWidgetItemWrap::QListWidgetItemWrap(const Napi::CallbackInfo& info) : Napi::ObjectWrap(info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); - if (info.Length() == 1) { - QString text = - QString::fromUtf8(info[0].As().Utf8Value().c_str()); - this->instance = new QListWidgetItem(text); - } else if (info.Length() == 0) { - this->instance = new QListWidgetItem(); + if (info.Length() > 0 && info[0].IsExternal()) { + // --- if external --- + this->instance = info[0].As>().Data(); + if (info.Length() == 2) { + this->disableDeletion = info[1].As().Value(); + } } else { - Napi::TypeError::New(env, "Wrong number of arguments") - .ThrowAsJavaScriptException(); + // --- regular cases --- + if (info.Length() == 1) { + QString text = + QString::fromUtf8(info[0].As().Utf8Value().c_str()); + this->instance = new QListWidgetItem(text); + } else if (info.Length() == 0) { + this->instance = new QListWidgetItem(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } } this->rawData = extrautils::configureComponent(this->getInternalInstance()); }