This commit is contained in:
Atul R 2019-06-08 18:30:30 +02:00
parent 6ddc6167e2
commit e835a8be86
2 changed files with 32 additions and 38 deletions

View File

@ -37,10 +37,38 @@ QPushButtonWrap::QPushButtonWrap(const Napi::CallbackInfo& info): Napi::ObjectWr
}
QPushButtonWrap::~QPushButtonWrap() {
this->nodeEmit.release();
this->emitOnNode.release(); //cleanup emitOnNode
delete this->instance;
}
Napi::Value QPushButtonWrap::setupEventListeners(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
this->emitOnNode = std::make_unique<ThreadSafeCallback>(info[0].As<Napi::Function>());
// Qt Connects: Implement all signal connects here
QObject::connect(this->instance, &QPushButton::clicked, [=](bool checked) {
this->emitOnNode->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "clicked"), Napi::Value::From(env, checked) };
});
});
QObject::connect(this->instance, &QPushButton::released, [=]() {
this->emitOnNode->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "released") };
});
});
QObject::connect(this->instance, &QPushButton::pressed, [=]() {
this->emitOnNode->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "pressed") };
});
});
QObject::connect(this->instance, &QPushButton::toggled, [=](bool checked) {
this->emitOnNode->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "toggled"), Napi::Value::From(env, checked) };
});
});
return env.Null();
}
Napi::Value QPushButtonWrap::setText(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);

View File

@ -1,58 +1,24 @@
#pragma once
#include <napi.h>
#include <napi-thread-safe-callback.hpp>
#include "npushbutton.h"
#include "src/cpp/QtGui/QWidget/qwidget_macro.h"
#include "napi-thread-safe-callback.hpp"
class QPushButtonWrap : public Napi::ObjectWrap<QPushButtonWrap> {
private:
NPushButton* instance;
std::unique_ptr<ThreadSafeCallback> nodeEmit;
std::unique_ptr<ThreadSafeCallback> emitOnNode;
public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QPushButtonWrap(const Napi::CallbackInfo& info);
~QPushButtonWrap();
NPushButton* getInternalInstance();
Napi::Value setupEventListeners(const Napi::CallbackInfo& info);
//class constructor
static Napi::FunctionReference constructor;
//wrapped methods
Napi::Value setText(const Napi::CallbackInfo& info);
Napi::Value setupEventListeners(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
this->nodeEmit = std::make_unique<ThreadSafeCallback>(info[0].As<Napi::Function>());
NPushButton::connect(this->instance, &QPushButton::clicked,
[=](bool val) {
this->nodeEmit->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "clicked"), Napi::Value::From(env,val) };
});
}
);
NPushButton::connect(this->instance, &QPushButton::released,
[=]() {
this->nodeEmit->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "released") };
});
}
);
NPushButton::connect(this->instance, &QPushButton::pressed,
[=]() {
this->nodeEmit->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "pressed") };
});
}
);
NPushButton::connect(this->instance, &QPushButton::toggled,
[=](bool val) {
this->nodeEmit->call([=](Napi::Env env, std::vector<napi_value>& args) {
args = { Napi::String::New(env, "toggled"), Napi::Value::From(env,val) };
});
}
);
return env.Null();
}
QWIDGET_WRAPPED_METHODS_DECLARATION
};