cleanest implementation for now. No dependency on main widget class

This commit is contained in:
Atul R 2019-06-08 14:26:01 +02:00
parent 8883ff1e91
commit 120e45f583
3 changed files with 11 additions and 25 deletions

View File

@ -4,35 +4,13 @@
#include <QPushButton>
#include "src/cpp/core/YogaWidget/yogawidget.h"
#include "napi.h"
#include "napi-thread-safe-callback.hpp"
#include "deps/spdlog/spdlog.h"
class NPushButton: public QPushButton, public YogaWidget
{
private:
std::unique_ptr<ThreadSafeCallback> emitRef;
public:
SET_YOGA_WIDGET_Q_PROPERTIES
using QPushButton::QPushButton; //inherit all constructors of QPushButton
NPushButton(){
connect(this, &QPushButton::clicked,
[=](bool val) {
QString eventType = "clicked";
emitRef->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, eventType.toStdString()), Napi::Boolean::New(env, val) };
});
}
);
}
~NPushButton() {
this->emitRef.reset();
};
Q_OBJECT
public:
void setNodeEmitterEmit( std::unique_ptr<ThreadSafeCallback> &emitterEmit){
this->emitRef = std::move(emitterEmit);
}
};

View File

@ -37,6 +37,7 @@ QPushButtonWrap::QPushButtonWrap(const Napi::CallbackInfo& info): Napi::ObjectWr
}
QPushButtonWrap::~QPushButtonWrap() {
this->emitterEmit.release();
delete this->instance;
}

View File

@ -8,6 +8,7 @@
class QPushButtonWrap : public Napi::ObjectWrap<QPushButtonWrap> {
private:
NPushButton* instance;
std::unique_ptr<ThreadSafeCallback> emitterEmit;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QPushButtonWrap(const Napi::CallbackInfo& info);
@ -20,9 +21,15 @@ class QPushButtonWrap : public Napi::ObjectWrap<QPushButtonWrap> {
Napi::Value setNodeEventEmiiter(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
std::unique_ptr<ThreadSafeCallback> emitterEmit = std::make_unique<ThreadSafeCallback>(info[0].As<Napi::Function>());
this->instance->setNodeEmitterEmit(emitterEmit);
emitterEmit.release();
this->emitterEmit = std::make_unique<ThreadSafeCallback>(info[0].As<Napi::Function>());
NPushButton::connect(this->instance, &QPushButton::clicked,
[=](bool val) {
this->emitterEmit->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "clicked"), Napi::Boolean::New(env, val) };
});
}
);
return env.Null();
}