cleanest implementation for now. No dependency on main widget class
This commit is contained in:
parent
8883ff1e91
commit
120e45f583
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -37,6 +37,7 @@ QPushButtonWrap::QPushButtonWrap(const Napi::CallbackInfo& info): Napi::ObjectWr
|
||||
}
|
||||
|
||||
QPushButtonWrap::~QPushButtonWrap() {
|
||||
this->emitterEmit.release();
|
||||
delete this->instance;
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user