From fdc8d271d8677a48aedd17a270d5921a8222b65d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Borecki?= Date: Sat, 31 Aug 2019 18:42:17 +0200 Subject: [PATCH] Added missing QWidget set methods and QCursor support --- config/application.gypi | 1 + docs/api/NodeWidget.md | 18 ++++++ extras/assets/nodegui.png | Bin 0 -> 40701 bytes src/cpp/QtGui/QCursor/qcursor_wrap.cpp | 68 ++++++++++++++++++++++ src/cpp/QtGui/QCursor/qcursor_wrap.h | 21 +++++++ src/cpp/QtWidgets/QWidget/qwidget_macro.h | 26 +++++++++ src/cpp/main.cpp | 2 + src/demo.ts | 10 +++- src/index.ts | 1 + src/lib/QtGui/QCursor/index.ts | 22 +++++++ src/lib/QtWidgets/QWidget/index.ts | 12 ++++ 11 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 extras/assets/nodegui.png create mode 100644 src/cpp/QtGui/QCursor/qcursor_wrap.cpp create mode 100644 src/cpp/QtGui/QCursor/qcursor_wrap.h create mode 100644 src/lib/QtGui/QCursor/index.ts diff --git a/config/application.gypi b/config/application.gypi index 60e08454d..b3a835dab 100644 --- a/config/application.gypi +++ b/config/application.gypi @@ -14,6 +14,7 @@ "../src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp", "../src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp", "../src/cpp/QtGui/QIcon/qicon_wrap.cpp", + "../src/cpp/QtGui/QCursor/qcursor_wrap.cpp", '../src/cpp/core/FlexLayout/flexlayout_wrap.cpp', "../src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp", "../src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp", diff --git a/docs/api/NodeWidget.md b/docs/api/NodeWidget.md index fc61f7d02..e29571bb7 100644 --- a/docs/api/NodeWidget.md +++ b/docs/api/NodeWidget.md @@ -82,6 +82,24 @@ Sets the property that holds the widget's style sheet. It calls the native metho - `styleSheet` string - String which holds the widget's style sheet. Make sure you create this string using `StyleSheet.create()` +#### `widget.setCursor(cursor)` + +Sets the window mouse cursor. It calls the native method [QWidget: setCursor](https://doc.qt.io/qt-5/qwidget.html#cursor-prop). + +- `cursor` CursorShape - Specifies current cursor for the window [CursorShape is an enum from Qt](api/QtEnums.md) + +#### `widget.setWindowIcon(icon)` + +Sets the window icon. It calls the native method [QWidget: setWindowIcon](https://doc.qt.io/qt-5/qwidget.html#windowIcon-prop). + +- `icon` QIcon - Specifies icon for the window. + +#### `widget.setWindowState(state)` + +Sets the window state. It calls the native method [QWidget: setWindowState](https://doc.qt.io/qt-5/qwidget.html#setWindowState). + +- `state` WindowState - Specifies current state for the window [WindowState is an enum from Qt](api/QtEnums.md) + #### `widget.setWindowTitle(title)` Sets the window title property. It calls the native method [QWidget: setWindowTitle](https://doc.qt.io/qt-5/qwidget.html#windowTitle-prop). diff --git a/extras/assets/nodegui.png b/extras/assets/nodegui.png new file mode 100644 index 0000000000000000000000000000000000000000..16c3c028253c637c016d18ad0f82170e39e03b25 GIT binary patch literal 40701 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 +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + if (info.Length() == 1) + { + Napi::Number cursor = info[0].As(); + this->instance = new QCursor(static_cast(cursor.Int32Value())); + } + else if (info.Length() == 0) + { + this->instance = new QCursor(); + } + else + { + Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); + } +} + +QCursorWrap::~QCursorWrap() +{ + delete this->instance; +} + +QCursor *QCursorWrap::getInternalInstance() +{ + return this->instance; +} + +Napi::Value QCursorWrap::pos(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + QPoint pos = this->instance->pos(); + Napi::Object posObj = Napi::Object::New(env); + posObj.Set("x", pos.x()); + posObj.Set("y", pos.y()); + return posObj; +} + +Napi::Value QCursorWrap::setPos(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number x = info[0].As(); + Napi::Number y = info[1].As(); + this->instance->setPos(x.Int32Value(), y.Int32Value()); + return env.Null(); +} \ No newline at end of file diff --git a/src/cpp/QtGui/QCursor/qcursor_wrap.h b/src/cpp/QtGui/QCursor/qcursor_wrap.h new file mode 100644 index 000000000..aca55ebdc --- /dev/null +++ b/src/cpp/QtGui/QCursor/qcursor_wrap.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include "src/cpp/core/Component/component_macro.h" + +class QCursorWrap : public Napi::ObjectWrap +{ +private: + QCursor *instance; + +public: + static Napi::FunctionReference constructor; + static Napi::Object init(Napi::Env env, Napi::Object exports); + QCursorWrap(const Napi::CallbackInfo &info); + ~QCursorWrap(); + QCursor *getInternalInstance(); + // Wrapped methods + Napi::Value pos(const Napi::CallbackInfo& info); + Napi::Value setPos(const Napi::CallbackInfo& info); +}; diff --git a/src/cpp/QtWidgets/QWidget/qwidget_macro.h b/src/cpp/QtWidgets/QWidget/qwidget_macro.h index 4beddf507..f0a8a3729 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_macro.h +++ b/src/cpp/QtWidgets/QWidget/qwidget_macro.h @@ -4,6 +4,7 @@ #include "src/cpp/core/YogaWidget/yogawidget_macro.h" #include "src/cpp/core/Events/eventwidget_macro.h" #include "src/cpp/core/Component/component_macro.h" +#include "src/cpp/QtGui/QIcon/qicon_wrap.h" #include /* @@ -57,6 +58,28 @@ Napi::Value setStyleSheet(const Napi::CallbackInfo& info){ \ this->instance->setStyleSheet(style.c_str()); \ return env.Null(); \ } \ +Napi::Value setCursor(const Napi::CallbackInfo& info){ \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number cursor = info[0].As(); \ + this->instance->setCursor(static_cast(cursor.Int32Value())); \ + return env.Null(); \ +} \ +Napi::Value setWindowIcon(const Napi::CallbackInfo& info){ \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Object iconObject = info[0].As(); \ + QIconWrap *iconWrap = Napi::ObjectWrap::Unwrap(iconObject); \ + this->instance->setWindowIcon(*iconWrap->getInternalInstance()); \ + return env.Null(); \ +} \ +Napi::Value setWindowState(const Napi::CallbackInfo& info){ \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number state = info[0].As(); \ + this->instance->setWindowState(static_cast(state.Int32Value())); \ + return env.Null(); \ +} \ Napi::Value setWindowTitle(const Napi::CallbackInfo& info){ \ Napi::Env env = info.Env(); \ Napi::HandleScope scope(env); \ @@ -227,6 +250,9 @@ Napi::Value setWindowFlag(const Napi::CallbackInfo& info){ \ InstanceMethod("close",&WidgetWrapName::close), \ InstanceMethod("setLayout",&WidgetWrapName::setLayout), \ InstanceMethod("setStyleSheet",&WidgetWrapName::setStyleSheet), \ + InstanceMethod("setCursor",&WidgetWrapName::setCursor), \ + InstanceMethod("setWindowIcon",&WidgetWrapName::setWindowIcon), \ + InstanceMethod("setWindowState",&WidgetWrapName::setWindowState), \ InstanceMethod("setWindowTitle",&WidgetWrapName::setWindowTitle), \ InstanceMethod("styleSheet",&WidgetWrapName::styleSheet), \ InstanceMethod("hide",&WidgetWrapName::hide), \ diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index d25f3e18f..3ff51c7e5 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -2,6 +2,7 @@ #include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" #include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" #include "src/cpp/QtGui/QIcon/qicon_wrap.h" +#include "src/cpp/QtGui/QCursor/qcursor_wrap.h" #include "src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h" #include "src/cpp/QtWidgets/QLayout/qlayout_wrap.h" #include "src/cpp/QtWidgets/QDial/qdial_wrap.h" @@ -29,6 +30,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QWidgetWrap::init(env, exports); QPixmapWrap::init(env, exports); QIconWrap::init(env, exports); + QCursorWrap::init(env, exports); QGridLayoutWrap::init(env, exports); FlexLayoutWrap::init(env, exports); QMainWindowWrap::init(env, exports); diff --git a/src/demo.ts b/src/demo.ts index ee41f3e5e..4352000d0 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -14,6 +14,7 @@ import { } from "./index"; import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; import { QPixmap } from "./lib/QtGui/QPixmap"; +import { CursorShape, WindowState } from "./lib/QtEnums" const path = require("path"); @@ -22,6 +23,7 @@ const win = new QMainWindow(); const label = new QLabel(); label.setText("Hello world 🧙"); label.setInlineStyle("font-size: 20px;"); +label.setCursor(CursorShape.ForbiddenCursor); const checkbox = new QCheckBox(); checkbox.setText("Check me out?"); @@ -40,6 +42,10 @@ button.setText("Push Push Push!"); button.setObjectName("btn"); button.setFlat(true); +const nodeguiLogo = new QIcon( + path.resolve(__dirname, "../extras/assets/nodegui.png") +); + const icon = new QIcon( path.resolve(__dirname, "../extras/assets/start_icon.png") ); @@ -92,9 +98,11 @@ win.setStyleSheet(` } `); -win.setWindowTitle("hello"); +win.setWindowIcon(nodeguiLogo); +win.setWindowTitle("NodeGUI Demo"); win.resize(400, 400); win.show(); +win.setWindowState(WindowState.WindowActive); (global as any).win = win; // To prevent win from being garbage collected. diff --git a/src/index.ts b/src/index.ts index 6a483ecfb..37e86a29f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ export { QApplication } from "./lib/QtGui/QApplication"; export { QWidget, QWidgetEvents } from "./lib/QtWidgets/QWidget"; export { QPixmap } from "./lib/QtGui/QPixmap"; export { QIcon } from "./lib/QtGui/QIcon"; +export { QCursor } from "./lib/QtGui/QCursor"; // Abstract: export { NodeWidget } from "./lib/QtWidgets/QWidget"; export { NodeLayout } from "./lib/QtWidgets/QLayout"; diff --git a/src/lib/QtGui/QCursor/index.ts b/src/lib/QtGui/QCursor/index.ts new file mode 100644 index 000000000..352e3d62e --- /dev/null +++ b/src/lib/QtGui/QCursor/index.ts @@ -0,0 +1,22 @@ +import addon from "../../core/addon"; +import { Component, NativeElement } from "../../core/Component"; +import { QPixmap } from "../QPixmap"; + +type arg = NativeElement | number | QPixmap; +export class QCursor extends Component { + native: NativeElement; + constructor(arg?: arg) { + super(); + if (arg) { + this.native = new addon.QCursor(arg); + } else { + this.native = new addon.QCursor(); + } + } + pos = (): { x: number; y: number } => { + return this.native.pos(); + } + setPos = (x: number, y: number) => { + return this.native.setPos(x, y); + } +} diff --git a/src/lib/QtWidgets/QWidget/index.ts b/src/lib/QtWidgets/QWidget/index.ts index 497fba1b4..2f184d5ef 100644 --- a/src/lib/QtWidgets/QWidget/index.ts +++ b/src/lib/QtWidgets/QWidget/index.ts @@ -4,6 +4,9 @@ import { EventWidget, BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; import { FlexLayout } from "../../core/FlexLayout"; import { WidgetAttribute, WindowType } from "../../QtEnums"; +import { QIcon } from "../../QtGui/QIcon"; +import { QCursor } from "../../QtGui/QCursor"; +import { CursorShape, WindowState } from "../../QtEnums"; import { applyStyleSheet, StyleSheet, @@ -37,6 +40,15 @@ export abstract class NodeWidget extends EventWidget { const preparedSheet = await StyleSheet.create(styleSheet); await applyStyleSheet(this, preparedSheet); }; + setCursor(cursor: CursorShape | QCursor) { + this.native.setCursor(cursor); + } + setWindowIcon(icon: QIcon) { + this.native.setWindowIcon(icon.native); + } + setWindowState = async (state: WindowState) => { + return this.native.setWindowState(state); + }; setWindowTitle = async (title: string) => { return this.native.setWindowTitle(title); };