From 6926bf940ae06d37c830c0c15420d4e17f16a071 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 10:44:19 +0200 Subject: [PATCH 1/2] Adds plain text edit methods and signals --- .../QtWidgets/QPlainTextEdit/nplaintextedit.h | 35 +++++++++++++++++++ .../QPlainTextEdit/qplaintextedit_wrap.cpp | 34 ++++++++++++++++++ .../QPlainTextEdit/qplaintextedit_wrap.h | 4 +++ src/demo.ts | 6 ++-- src/index.ts | 4 ++- src/lib/QtGui/QTextOption/index.ts | 3 ++ src/lib/QtGui/QTextOption/textOptionEnums.ts | 7 ++++ src/lib/QtWidgets/QPlainTextEdit/index.ts | 32 +++++++++++++++-- 8 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 src/lib/QtGui/QTextOption/index.ts create mode 100644 src/lib/QtGui/QTextOption/textOptionEnums.ts diff --git a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h index b1da3ec04..2b5d5d911 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h @@ -17,5 +17,40 @@ public: Napi::HandleScope scope(env); this->emitOnNode.Call({Napi::String::New(env, "textChanged")}); }); + QObject::connect(this, &QPlainTextEdit::blockCountChanged, [=](int newBlockCount) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "blockCountChanged"), Napi::Value::From(env, newBlockCount)}); + }); + QObject::connect(this, &QPlainTextEdit::copyAvailable, [=](bool yes) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "copyAvailable"), Napi::Value::From(env, yes)}); + }); + QObject::connect(this, &QPlainTextEdit::cursorPositionChanged, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "cursorPositionChanged")}); + }); + QObject::connect(this, &QPlainTextEdit::modificationChanged, [=](bool charged) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "modificationChanged"), Napi::Value::From(env, charged)}); + }); + QObject::connect(this, &QPlainTextEdit::redoAvailable, [=](bool available) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "redoAvailable"), Napi::Value::From(env, available)}); + }); + QObject::connect(this, &QPlainTextEdit::selectionChanged, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "selectionChanged")}); + }); + QObject::connect(this, &QPlainTextEdit::undoAvailable, [=](bool available) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "undoAvailable"), Napi::Value::From(env, available)}); + }); } }; diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp index 797dc031a..c8b7f6af8 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp @@ -15,6 +15,10 @@ Napi::Object QPlainTextEditWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("toPlainText",&QPlainTextEditWrap::toPlainText), InstanceMethod("setReadOnly", &QPlainTextEditWrap::setReadOnly), InstanceMethod("clear", &QPlainTextEditWrap::clear), + InstanceMethod("setWordWrapMode", &QPlainTextEditWrap::setWordWrapMode), + InstanceMethod("wordWrapMode", &QPlainTextEditWrap::wordWrapMode), + InstanceMethod("setLineWrapMode", &QPlainTextEditWrap::setLineWrapMode), + InstanceMethod("lineWrapMode", &QPlainTextEditWrap::lineWrapMode), QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QPlainTextEditWrap) QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE(QPlainTextEditWrap) }); @@ -77,3 +81,33 @@ Napi::Value QPlainTextEditWrap::clear(const Napi::CallbackInfo &info){ this->instance->clear(); return env.Null(); } + +Napi::Value QPlainTextEditWrap::setWordWrapMode(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number mode = info[0].As(); + this->instance->setWordWrapMode(static_cast(mode.Int32Value())); + return env.Null(); +} + +Napi::Value QPlainTextEditWrap::wordWrapMode(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + int value = static_cast(this->instance->wordWrapMode()); + return Napi::Number::From(env, value); +} + +Napi::Value QPlainTextEditWrap::setLineWrapMode(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number mode = info[0].As(); + this->instance->setLineWrapMode(static_cast(mode.Int32Value())); + return env.Null(); +} + +Napi::Value QPlainTextEditWrap::lineWrapMode(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + int value = static_cast(this->instance->lineWrapMode()); + return Napi::Number::From(env, value); +} \ 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 b9ff9c6ce..0081d327f 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -23,5 +23,9 @@ class QPlainTextEditWrap : public Napi::ObjectWrap{ Napi::Value toPlainText(const Napi::CallbackInfo &info); Napi::Value setReadOnly(const Napi::CallbackInfo &info); Napi::Value clear(const Napi::CallbackInfo &info); + Napi::Value setWordWrapMode(const Napi::CallbackInfo &info); + Napi::Value wordWrapMode(const Napi::CallbackInfo &info); + Napi::Value setLineWrapMode(const Napi::CallbackInfo &info); + Napi::Value lineWrapMode(const Napi::CallbackInfo &info); }; diff --git a/src/demo.ts b/src/demo.ts index 4352000d0..5dae4c81b 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -10,11 +10,12 @@ import { QWidget, QIcon, QDial, - QPlainTextEdit + QPlainTextEdit, + QTextOptionEnums } from "./index"; import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; import { QPixmap } from "./lib/QtGui/QPixmap"; -import { CursorShape, WindowState } from "./lib/QtEnums" +import { CursorShape, WindowState } from "./lib/QtEnums"; const path = require("path"); @@ -65,6 +66,7 @@ rootView.setLayout(new FlexLayout()); const textEdit = new QPlainTextEdit(); textEdit.setPlainText("Hello"); +textEdit.setWordWrapMode(QTextOptionEnums.WrapMode.NoWrap); const scrollArea = new QScrollArea(); scrollArea.setInlineStyle("flex: 1; width:'100%';"); diff --git a/src/index.ts b/src/index.ts index 2b5734886..5c88e1df6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ export { QApplication } from "./lib/QtGui/QApplication"; export { QPixmap } from "./lib/QtGui/QPixmap"; export { QIcon } from "./lib/QtGui/QIcon"; export { QCursor } from "./lib/QtGui/QCursor"; +export { QTextOptionEnums } from "./lib/QtGui/QTextOption"; // Events: Maybe a separate module ? export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent"; export { NativeEvent } from "./lib/core/EventWidget"; @@ -26,7 +27,8 @@ export { QSpinBox, QSpinBoxEvents } from "./lib/QtWidgets/QSpinBox"; export { QRadioButton, QRadioButtonEvents } from "./lib/QtWidgets/QRadioButton"; export { QPlainTextEdit, - QPlainTextEditEvents + QPlainTextEditEvents, + LineWrapMode } from "./lib/QtWidgets/QPlainTextEdit"; export { QScrollArea, QScrollAreaEvents } from "./lib/QtWidgets/QScrollArea"; // Layouts: diff --git a/src/lib/QtGui/QTextOption/index.ts b/src/lib/QtGui/QTextOption/index.ts new file mode 100644 index 000000000..ad0a97e03 --- /dev/null +++ b/src/lib/QtGui/QTextOption/index.ts @@ -0,0 +1,3 @@ +import * as Enums from "./textOptionEnums"; + +export const QTextOptionEnums = Enums; diff --git a/src/lib/QtGui/QTextOption/textOptionEnums.ts b/src/lib/QtGui/QTextOption/textOptionEnums.ts new file mode 100644 index 000000000..077d3102b --- /dev/null +++ b/src/lib/QtGui/QTextOption/textOptionEnums.ts @@ -0,0 +1,7 @@ +export enum WrapMode { + NoWrap, + WordWrap, + ManualWrap, + WrapAnywhere, + WrapAtWordBoundaryOrAnywhere +} diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index b87994b01..0858fe9cc 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -3,12 +3,24 @@ import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; import { QAbstractScrollArea } from "../QAbstractScrollArea"; +import { WrapMode } from "../../QtGui/QTextOption/textOptionEnums"; export const QPlainTextEditEvents = Object.freeze({ ...BaseWidgetEvents, - textChanged: "textChanged" + textChanged: "textChanged", + blockCountChanged: "blockCountChanged", + copyAvailable: "copyAvailable", + cursorPositionChanged: "cursorPositionChanged", + modificationChanged: "modificationChanged", + redoAvailable: "redoAvailable", + selectionChanged: "selectionChanged", + undoAvailable: "undoAvailable" }); +export enum LineWrapMode { + NoWrap, + WidgetWidth +} export class QPlainTextEdit extends QAbstractScrollArea { native: NativeElement; constructor(parent?: NodeWidget) { @@ -26,12 +38,16 @@ export class QPlainTextEdit extends QAbstractScrollArea { this.toPlainText.bind(this); this.setReadOnly.bind(this); this.clear.bind(this); + this.setWordWrapMode.bind(this); + this.wordWrapMode.bind(this); + this.setLineWrapMode.bind(this); + this.lineWrapMode.bind(this); } setPlainText(text: string | number) { // react:✓ this.native.setPlainText(`${text}`); } - toPlainText() { + toPlainText(): string { // react:✓ return this.native.toPlainText(); } @@ -43,4 +59,16 @@ export class QPlainTextEdit extends QAbstractScrollArea { // react:✓ this.native.clear(); } + setWordWrapMode(mode: WrapMode) { + this.native.setWordWrapMode(mode); + } + wordWrapMode(): WrapMode { + return this.native.wordWrapMode(); + } + setLineWrapMode(mode: LineWrapMode) { + this.native.setLineWrapMode(mode); + } + lineWrapMode(): LineWrapMode { + return this.native.lineWrapMode(); + } } From 179c48a28d6fc6bd0a677a70663a0b80c4e3cdc6 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 10:52:47 +0200 Subject: [PATCH 2/2] Adds docs --- docs/api/QPlainTextEdit.md | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/docs/api/QPlainTextEdit.md b/docs/api/QPlainTextEdit.md index 0a820a80d..3185bb8bd 100644 --- a/docs/api/QPlainTextEdit.md +++ b/docs/api/QPlainTextEdit.md @@ -32,20 +32,40 @@ QPlainTextEdit can access all the instance properties defined in [NodeWidget](ap 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) +#### `plainTextEdit.setPlainText(text)` -Sets the given text to the plainTextEdit. +Sets the given text to the plainTextEdit. It calls the native method [QPlainTextEdit: setPlainText](https://doc.qt.io/qt-5/qplaintextedit.html#setPlainText). - `text` string -#### [`plainTextEdit.toPlainText()`](https://doc.qt.io/qt-5/qplaintextedit.html#toPlainText) +#### `plainTextEdit.toPlainText()` -Returns the text of the text edit as plain text. +Returns the text of the text edit as plain text. [QPlainTextEdit: toPlainText](https://doc.qt.io/qt-5/qplaintextedit.html#toPlainText). -#### [`plainTextEdit.setReadOnly(isReadOnly)`](https://doc.qt.io/qt-5/qplaintextedit.html#readOnly-prop) +#### `plainTextEdit.setReadOnly(isReadOnly)` -Sets the plainTextEdit to be read only. +Sets the plainTextEdit to be read only. [QPlainTextEdit: isReadOnly](https://doc.qt.io/qt-5/qplaintextedit.html#readOnly-prop). -#### [`plainTextEdit.clear()`](https://doc.qt.io/qt-5/qplaintextedit.html#clear) +#### `plainTextEdit.clear()` -Deletes all the text in the text edit. +Deletes all the text in the text edit.[QPlainTextEdit: clear](https://doc.qt.io/qt-5/qplaintextedit.html#clear). + +#### `plainTextEdit.setWordWrapMode(mode)` + +This property holds the mode QPlainTextEdit will use when wrapping text by words.[QPlainTextEdit: setWordWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop). + +- mode: WrapMode + +#### `plainTextEdit.wordWrapMode()` + +returns word wrap mode. [QPlainTextEdit: wordWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop). + +#### `plainTextEdit.setLineWrapMode(mode)` + +This property holds the line wrap mode. [QPlainTextEdit: setLineWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#lineWrapMode-prop). + +- mode: LineWrapMode + +#### `plainTextEdit.lineWrapMode()` + +returns line wrap mode. [QPlainTextEdit: setLineWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#lineWrapMode-prop).