From 0151246d95ec8d472f1c7a7ab7f21c6078f1ae3b Mon Sep 17 00:00:00 2001 From: rgabs Date: Tue, 20 Aug 2019 00:47:14 +0530 Subject: [PATCH 1/3] Add textChange event for QPlainTextEdit --- src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h | 11 +++++++++++ src/demo.ts | 12 +++++++++++- src/lib/QtWidgets/QPlainTextEdit/index.ts | 4 +++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h index 18a60f7f2..acdcaff1f 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h @@ -1,5 +1,6 @@ #pragma once +#include "deps/spdlog/spdlog.h" #include #include "src/cpp/core/NodeWidget/nodewidget.h" @@ -8,4 +9,14 @@ class NPlainTextEdit : public QPlainTextEdit, public NodeWidget NODEWIDGET_IMPLEMENTATIONS public: using QPlainTextEdit::QPlainTextEdit; //inherit all constructors of QPlainTextEdit + + void connectWidgetSignalsToEventEmitter() { + // Qt Connects: Implement all signal connects here + QObject::connect(this, &QPlainTextEdit::textChanged, [=]() { + QString str = this->toPlainText(); + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "textChanged"), Napi::Value::From(env, str.toStdString())}); + }); + } }; diff --git a/src/demo.ts b/src/demo.ts index ee2708601..96e608dc8 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -9,7 +9,8 @@ import { FlexLayout, QWidget, QIcon, - QPlainTextEdit + QPlainTextEdit, + QPlainTextEditEvents } from "./index"; const path = require("path"); @@ -28,6 +29,7 @@ const lineEdit = new QLineEdit(); lineEdit.setPlaceholderText("Enter your thoughts here"); lineEdit.setObjectName("editable"); + const button = new QPushButton(); button.setText("Push Push Push!"); button.setObjectName("btn"); @@ -49,8 +51,15 @@ radioButton.setText("Roger that!"); const rootView = new QWidget(); rootView.setObjectName("root"); rootView.setLayout(new FlexLayout()); + +const lineEditLabel = new QLabel(); +lineEditLabel.setInlineStyle("font-size: 12px;"); +lineEditLabel.setText("PlainTextEdit's bound Value"); const textEdit = new QPlainTextEdit(); textEdit.setPlainText("Hello"); +textEdit.addEventListener(QPlainTextEditEvents.textChanged, (value: string) => { + lineEditLabel.setText(value); +}); if (rootView.layout) { rootView.layout.addWidget(label); @@ -60,6 +69,7 @@ if (rootView.layout) { rootView.layout.addWidget(button); rootView.layout.addWidget(progressbar); rootView.layout.addWidget(textEdit); + rootView.layout.addWidget(lineEditLabel); } win.setCentralWidget(rootView); diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index f534dd62b..5e6faa5a3 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -4,8 +4,10 @@ import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; export const QPlainTextEditEvents = Object.freeze({ - ...BaseWidgetEvents + ...BaseWidgetEvents, + textChanged: "textChanged", }); + export class QPlainTextEdit extends NodeWidget { native: NativeElement; constructor(parent?: NodeWidget) { From 8c936b46da366d478978c759cdbf7815d2473da7 Mon Sep 17 00:00:00 2001 From: rgabs Date: Tue, 20 Aug 2019 01:29:21 +0530 Subject: [PATCH 2/3] Change implementation to make it similar to qt usage --- src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h | 2 +- src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp | 7 +++++++ src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h | 1 + src/demo.ts | 3 ++- src/lib/QtWidgets/QPlainTextEdit/index.ts | 4 ++++ 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h index acdcaff1f..853894c1f 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h @@ -16,7 +16,7 @@ public: QString str = this->toPlainText(); Napi::Env env = this->emitOnNode.Env(); Napi::HandleScope scope(env); - this->emitOnNode.Call({Napi::String::New(env, "textChanged"), Napi::Value::From(env, str.toStdString())}); + this->emitOnNode.Call({Napi::String::New(env, "textChanged")}); }); } }; diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp index bf5aa294a..fb3077cfe 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp @@ -12,6 +12,7 @@ Napi::Object QPlainTextEditWrap::init(Napi::Env env, Napi::Object exports) { char CLASSNAME[] = "QPlainTextEdit"; Napi::Function func = DefineClass(env, CLASSNAME, { InstanceMethod("setPlainText",&QPlainTextEditWrap::setPlainText), + InstanceMethod("plainText",&QPlainTextEditWrap::plainText), QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QPlainTextEditWrap) }); constructor = Napi::Persistent(func); @@ -51,3 +52,9 @@ Napi::Value QPlainTextEditWrap::setPlainText(const Napi::CallbackInfo& info){ this->instance->setPlainText(plainText.Utf8Value().c_str()); return env.Null(); } + +Napi::Value QPlainTextEditWrap::plainText(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + return Napi::Value::From(env, this->instance->toPlainText().toStdString()); +} \ No newline at end of file diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index d158398e5..1295b0250 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -19,5 +19,6 @@ class QPlainTextEditWrap : public Napi::ObjectWrap{ QWIDGET_WRAPPED_METHODS_DECLARATION Napi::Value setPlainText(const Napi::CallbackInfo& info); + Napi::Value plainText(const Napi::CallbackInfo &info); }; diff --git a/src/demo.ts b/src/demo.ts index 96e608dc8..a64c83322 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -57,8 +57,9 @@ lineEditLabel.setInlineStyle("font-size: 12px;"); lineEditLabel.setText("PlainTextEdit's bound Value"); const textEdit = new QPlainTextEdit(); textEdit.setPlainText("Hello"); + textEdit.addEventListener(QPlainTextEditEvents.textChanged, (value: string) => { - lineEditLabel.setText(value); + lineEditLabel.setText(textEdit.plainText()); }); if (rootView.layout) { diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index 5e6faa5a3..905455c75 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -22,8 +22,12 @@ export class QPlainTextEdit extends NodeWidget { this.parent = parent; // bind member functions this.setPlainText.bind(this); + this.plainText.bind(this); } setPlainText(text: string | number) { this.native.setPlainText(`${text}`); } + plainText() { + return this.native.plainText(); + } } From bcb6b8b3bedef7a4ff535ca56b820eac5b3ad5fe Mon Sep 17 00:00:00 2001 From: rgabs Date: Tue, 20 Aug 2019 01:41:50 +0530 Subject: [PATCH 3/3] Rename plaintext to toPlainText and add docs --- docs/api/QPlainTextEdit.md | 12 +++++++++++- src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h | 1 - .../QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp | 4 ++-- .../QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h | 2 +- src/demo.ts | 2 +- src/lib/QtWidgets/QPlainTextEdit/index.ts | 6 +++--- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/docs/api/QPlainTextEdit.md b/docs/api/QPlainTextEdit.md index 13b46e601..688192dc9 100644 --- a/docs/api/QPlainTextEdit.md +++ b/docs/api/QPlainTextEdit.md @@ -30,4 +30,14 @@ QPlainTextEdit can access all the instance properties defined in [NodeWidget](ap ### Instance Methods -QPlainTextEdit can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). \ No newline at end of file +QPlainTextEdit can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). + +#### [`plainTextEdit.setPlainText(text)`](https://doc.qt.io/qt-5/qplaintextedit.html#setPlainText) + +Sets the given text to the plainTextEdit. + +- `text` string + +#### [`plainTextEdit.toPlainText()`](https://doc.qt.io/qt-5/qplaintextedit.html#toPlainText) + +Returns the text of the text edit as plain text. diff --git a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h index 853894c1f..76581de9f 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h @@ -13,7 +13,6 @@ public: void connectWidgetSignalsToEventEmitter() { // Qt Connects: Implement all signal connects here QObject::connect(this, &QPlainTextEdit::textChanged, [=]() { - QString str = this->toPlainText(); Napi::Env env = this->emitOnNode.Env(); Napi::HandleScope scope(env); this->emitOnNode.Call({Napi::String::New(env, "textChanged")}); diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp index fb3077cfe..7ba3483ec 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp @@ -12,7 +12,7 @@ Napi::Object QPlainTextEditWrap::init(Napi::Env env, Napi::Object exports) { char CLASSNAME[] = "QPlainTextEdit"; Napi::Function func = DefineClass(env, CLASSNAME, { InstanceMethod("setPlainText",&QPlainTextEditWrap::setPlainText), - InstanceMethod("plainText",&QPlainTextEditWrap::plainText), + InstanceMethod("toPlainText",&QPlainTextEditWrap::toPlainText), QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QPlainTextEditWrap) }); constructor = Napi::Persistent(func); @@ -53,7 +53,7 @@ Napi::Value QPlainTextEditWrap::setPlainText(const Napi::CallbackInfo& info){ return env.Null(); } -Napi::Value QPlainTextEditWrap::plainText(const Napi::CallbackInfo &info){ +Napi::Value QPlainTextEditWrap::toPlainText(const Napi::CallbackInfo &info){ Napi::Env env = info.Env(); Napi::HandleScope scope(env); return Napi::Value::From(env, this->instance->toPlainText().toStdString()); diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index 1295b0250..1ce65c159 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -19,6 +19,6 @@ class QPlainTextEditWrap : public Napi::ObjectWrap{ QWIDGET_WRAPPED_METHODS_DECLARATION Napi::Value setPlainText(const Napi::CallbackInfo& info); - Napi::Value plainText(const Napi::CallbackInfo &info); + Napi::Value toPlainText(const Napi::CallbackInfo &info); }; diff --git a/src/demo.ts b/src/demo.ts index a64c83322..fa85acc96 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -59,7 +59,7 @@ const textEdit = new QPlainTextEdit(); textEdit.setPlainText("Hello"); textEdit.addEventListener(QPlainTextEditEvents.textChanged, (value: string) => { - lineEditLabel.setText(textEdit.plainText()); + lineEditLabel.setText(textEdit.toPlainText()); }); if (rootView.layout) { diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index 905455c75..ee4c52019 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -22,12 +22,12 @@ export class QPlainTextEdit extends NodeWidget { this.parent = parent; // bind member functions this.setPlainText.bind(this); - this.plainText.bind(this); + this.toPlainText.bind(this); } setPlainText(text: string | number) { this.native.setPlainText(`${text}`); } - plainText() { - return this.native.plainText(); + toPlainText() { + return this.native.toPlainText(); } }