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(); + } }