From 95cdcb37beb78d6d5536f28a1b58e9902bb70500 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 10 Nov 2019 01:04:37 +0100 Subject: [PATCH] Adds QObject exports (#184) * Adds QObject wrapper * disable source map in the dist since its of no use * rename to nodeobject * Adds qobject setProperty and auto conversion of napi to qvariant (mvp version) * fix * moved qobject methods to qobject from qwidget * added qobject test cases --- CMakeLists.txt | 2 + package-lock.json | 444 ------------------ package.json | 1 - src/cpp/include/nodegui/Extras/Utils/nutils.h | 6 + .../nodegui/QtCore/QObject/nobject.hpp | 12 + .../nodegui/QtCore/QObject/qobject_macro.h | 60 ++- .../nodegui/QtCore/QObject/qobject_wrap.h | 24 + .../nodegui/QtWidgets/QWidget/qwidget_macro.h | 16 - src/cpp/lib/Extras/Utils/nutils.cpp | 60 ++- src/cpp/lib/QtCore/QObject/qobject_wrap.cpp | 40 ++ .../QScrollArea/qscrollarea_wrap.cpp | 5 + src/cpp/main.cpp | 2 + src/demo.ts | 4 +- src/index.ts | 2 + src/lib/QtCore/QObject.ts | 33 +- src/lib/QtCore/__tests__/QObject.test.ts | 12 + src/lib/QtWidgets/QAction.ts | 4 +- src/lib/QtWidgets/QShortcut.ts | 4 +- src/lib/QtWidgets/QSystemTrayIcon.ts | 4 +- src/lib/QtWidgets/QWidget.ts | 6 - src/lib/core/YogaWidget.ts | 4 +- tsconfig.json | 24 +- 22 files changed, 262 insertions(+), 507 deletions(-) create mode 100644 src/cpp/include/nodegui/QtCore/QObject/nobject.hpp create mode 100644 src/cpp/include/nodegui/QtCore/QObject/qobject_wrap.h create mode 100644 src/cpp/lib/QtCore/QObject/qobject_wrap.cpp create mode 100644 src/lib/QtCore/__tests__/QObject.test.ts diff --git a/CMakeLists.txt b/CMakeLists.txt index ec749f7fd..921673419 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QObject/qobject_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QWidget/qwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDial/qdial_wrap.cpp" @@ -64,6 +65,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QMenu/qmenu_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexlayout_wrap.cpp" # Custom widgets (include them for automoc since they contain Q_OBJECT) + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QObject/nobject.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLabel/nlabel.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QCheckBox/ncheckbox.hpp" diff --git a/package-lock.json b/package-lock.json index ca1961f67..8f4afdc22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -735,28 +735,12 @@ } } }, - "@zeit/schemas": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.6.0.tgz", - "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==", - "dev": true - }, "abab": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==", "dev": true }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, "acorn": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", @@ -828,48 +812,6 @@ "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "ansi-escapes": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", @@ -902,12 +844,6 @@ "normalize-path": "^2.1.1" } }, - "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", - "dev": true - }, "are-we-there-yet": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", @@ -917,12 +853,6 @@ "readable-stream": "^2.0.0 || ^1.1.13" } }, - "arg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz", - "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1218,54 +1148,6 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1365,12 +1247,6 @@ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1587,12 +1463,6 @@ } } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -1608,39 +1478,6 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "clipboardy": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", - "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", - "dev": true, - "requires": { - "arch": "^2.1.0", - "execa": "^0.8.0" - }, - "dependencies": { - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -1766,30 +1603,6 @@ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", - "dev": true, - "requires": { - "mime-db": ">= 1.40.0 < 2" - } - }, - "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.14", - "debug": "2.6.9", - "on-headers": "~1.0.1", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1806,12 +1619,6 @@ "typedarray": "^0.0.6" } }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", @@ -1908,17 +1715,6 @@ } } }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", @@ -2459,29 +2255,6 @@ "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", "dev": true }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -2677,23 +2450,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "dev": true, - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, "fb-watchman": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", @@ -5703,12 +5459,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, "neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", @@ -5897,12 +5647,6 @@ "isobject": "^3.0.1" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -6087,12 +5831,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -6105,12 +5843,6 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", - "dev": true - }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -6538,12 +6270,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -6711,25 +6437,6 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, "remark-math": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-1.0.6.tgz", @@ -7040,90 +6747,6 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "serve": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/serve/-/serve-11.2.0.tgz", - "integrity": "sha512-THZcLzDGk3vJqjhAbLkLag43tiE3V0B7wVe98Xtl+1KyAsr+4iShg+9hke4pLZmrCJu0pUg0TrbhJmdqn/MKoA==", - "dev": true, - "requires": { - "@zeit/schemas": "2.6.0", - "ajv": "6.5.3", - "arg": "2.0.0", - "boxen": "1.3.0", - "chalk": "2.4.1", - "clipboardy": "1.2.3", - "compression": "1.7.3", - "serve-handler": "6.1.2", - "update-check": "1.5.2" - }, - "dependencies": { - "ajv": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", - "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "serve-handler": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.2.tgz", - "integrity": "sha512-RFh49wX7zJmmOVDcIjiDSJnMH+ItQEvyuYLYuDBVoA/xmQSCuj+uRmk1cmBB5QQlI3qOiWKp6p4DUGY+Z5AB2A==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - }, - "dependencies": { - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "~1.33.0" - } - } - } - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -7652,15 +7275,6 @@ "yallist": "^3.0.3" } }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, "test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", @@ -8086,16 +7700,6 @@ } } }, - "update-check": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz", - "integrity": "sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==", - "dev": true, - "requires": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" - } - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -8165,12 +7769,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -8301,48 +7899,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "window-size": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", diff --git a/package.json b/package.json index c512e88c1..11e03f806 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,6 @@ "husky": "^3.0.9", "jest": "^24.9.0", "prettier": "^1.18.2", - "serve": "^11.1.0", "ts-jest": "^24.1.0", "typescript": "^3.7.2" }, diff --git a/src/cpp/include/nodegui/Extras/Utils/nutils.h b/src/cpp/include/nodegui/Extras/Utils/nutils.h index ed436cac2..19601b7d5 100644 --- a/src/cpp/include/nodegui/Extras/Utils/nutils.h +++ b/src/cpp/include/nodegui/Extras/Utils/nutils.h @@ -1,12 +1,18 @@ #pragma once +#include + #include +#include #include "core/FlexLayout/flexlayout.h" namespace extrautils { YGSize measureQtWidget(YGNodeRef node, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode); +QVariant* convertToQVariant(Napi::Env& env, Napi::Value& value); +bool isNapiValueInt(Napi::Env& env, Napi::Value& num); + template void safeDelete(QPointer component) { if (component.isNull()) { diff --git a/src/cpp/include/nodegui/QtCore/QObject/nobject.hpp b/src/cpp/include/nodegui/QtCore/QObject/nobject.hpp new file mode 100644 index 000000000..1529fe8e7 --- /dev/null +++ b/src/cpp/include/nodegui/QtCore/QObject/nobject.hpp @@ -0,0 +1,12 @@ +#pragma once +#include + +#include "core/Events/eventwidget.h" +#include "core/Events/eventwidget_macro.h" + +class NObject : public QObject, public EventWidget { + Q_OBJECT + EVENTWIDGET_IMPLEMENTATIONS(QObject) + public: + using QObject::QObject; +}; diff --git a/src/cpp/include/nodegui/QtCore/QObject/qobject_macro.h b/src/cpp/include/nodegui/QtCore/QObject/qobject_macro.h index 96599f600..761a7f2e0 100644 --- a/src/cpp/include/nodegui/QtCore/QObject/qobject_macro.h +++ b/src/cpp/include/nodegui/QtCore/QObject/qobject_macro.h @@ -1,5 +1,6 @@ #pragma once +#include "Extras/Utils/nutils.h" #include "core/Component/component_macro.h" #include "core/Events/eventwidget_macro.h" /* @@ -10,26 +11,53 @@ */ #ifndef QOBJECT_WRAPPED_METHODS_DECLARATION -#define QOBJECT_WRAPPED_METHODS_DECLARATION \ - \ - EVENTWIDGET_WRAPPED_METHODS_DECLARATION \ - \ - Napi::Value inherits(const Napi::CallbackInfo& info) { \ - Napi::Env env = info.Env(); \ - Napi::HandleScope scope(env); \ - Napi::String className = info[0].As(); \ - bool doesIt = this->instance->inherits(className.Utf8Value().c_str()); \ - return Napi::Value::From(env, doesIt); \ +#define QOBJECT_WRAPPED_METHODS_DECLARATION \ + \ + EVENTWIDGET_WRAPPED_METHODS_DECLARATION \ + \ + Napi::Value inherits(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::String className = info[0].As(); \ + bool doesIt = this->instance->inherits(className.Utf8Value().c_str()); \ + return Napi::Value::From(env, doesIt); \ + } \ + Napi::Value setProperty(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::String name = info[0].As(); \ + Napi::Value value = info[1]; \ + auto variant = \ + QSharedPointer(extrautils::convertToQVariant(env, value)); \ + this->instance->setProperty(name.Utf8Value().c_str(), *variant); \ + return env.Null(); \ + } \ + Napi::Value setObjectName(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::String objectName = info[0].As(); \ + this->instance->setObjectName( \ + QString::fromStdString(objectName.Utf8Value())); \ + return env.Null(); \ + } \ + Napi::Value objectName(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + QString objectName = this->instance->objectName(); \ + return Napi::String::New(env, objectName.toStdString()); \ } #endif // QOBJECT_WRAPPED_METHODS_DECLARATION #ifndef QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE -#define QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \ - \ - EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \ - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE \ - \ - InstanceMethod("inherits", &ComponentWrapName::inherits), +#define QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \ + \ + EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \ + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE \ + \ + InstanceMethod("inherits", &ComponentWrapName::inherits), \ + InstanceMethod("setProperty", &ComponentWrapName::setProperty), \ + InstanceMethod("setObjectName", &ComponentWrapName::setObjectName), \ + InstanceMethod("objectName", &ComponentWrapName::objectName), #endif // QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE diff --git a/src/cpp/include/nodegui/QtCore/QObject/qobject_wrap.h b/src/cpp/include/nodegui/QtCore/QObject/qobject_wrap.h new file mode 100644 index 000000000..982946699 --- /dev/null +++ b/src/cpp/include/nodegui/QtCore/QObject/qobject_wrap.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include + +#include + +#include "QtCore/QObject/nobject.hpp" +#include "QtCore/QObject/qobject_macro.h" + +class QObjectWrap : public Napi::ObjectWrap { + private: + QPointer instance; + + public: + static Napi::Object init(Napi::Env env, Napi::Object exports); + QObjectWrap(const Napi::CallbackInfo& info); + ~QObjectWrap(); + NObject* getInternalInstance(); + // class constructor + static Napi::FunctionReference constructor; + // wrapped methods + QOBJECT_WRAPPED_METHODS_DECLARATION +}; diff --git a/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h index 3030e3d12..f942bc839 100644 --- a/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h +++ b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h @@ -117,20 +117,6 @@ return env.Null(); \ } \ \ - Napi::Value setObjectName(const Napi::CallbackInfo& info) { \ - Napi::Env env = info.Env(); \ - Napi::HandleScope scope(env); \ - Napi::String objectName = info[0].As(); \ - this->instance->setObjectName( \ - QString::fromStdString(objectName.Utf8Value())); \ - return env.Null(); \ - } \ - Napi::Value objectName(const Napi::CallbackInfo& info) { \ - Napi::Env env = info.Env(); \ - Napi::HandleScope scope(env); \ - QString objectName = this->instance->objectName(); \ - return Napi::String::New(env, objectName.toStdString()); \ - } \ Napi::Value setMouseTracking(const Napi::CallbackInfo& info) { \ Napi::Env env = info.Env(); \ Napi::HandleScope scope(env); \ @@ -298,8 +284,6 @@ InstanceMethod("styleSheet", &WidgetWrapName::styleSheet), \ InstanceMethod("hide", &WidgetWrapName::hide), \ InstanceMethod("move", &WidgetWrapName::move), \ - InstanceMethod("setObjectName", &WidgetWrapName::setObjectName), \ - InstanceMethod("objectName", &WidgetWrapName::objectName), \ InstanceMethod("setMouseTracking", &WidgetWrapName::setMouseTracking), \ InstanceMethod("hasMouseTracking", &WidgetWrapName::hasMouseTracking), \ InstanceMethod("setEnabled", &WidgetWrapName::setEnabled), \ diff --git a/src/cpp/lib/Extras/Utils/nutils.cpp b/src/cpp/lib/Extras/Utils/nutils.cpp index 2b52ef191..81f787b23 100644 --- a/src/cpp/lib/Extras/Utils/nutils.cpp +++ b/src/cpp/lib/Extras/Utils/nutils.cpp @@ -1,10 +1,9 @@ #include "Extras/Utils/nutils.h" +#include #include #include -#include "deps/spdlog/spdlog.h" - YGSize extrautils::measureQtWidget(YGNodeRef node, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode) { @@ -26,3 +25,60 @@ YGSize extrautils::measureQtWidget(YGNodeRef node, float width, } return YGSize{width, height}; } + +bool extrautils::isNapiValueInt(Napi::Env& env, Napi::Value& num) { + return env.Global() + .Get("Number") + .ToObject() + .Get("isInteger") + .As() + .Call({num}) + .ToBoolean() + .Value(); +} + +QVariant* extrautils::convertToQVariant(Napi::Env& env, Napi::Value& value) { + // Warning: Make sure you delete the QVariant fron this function upon use. + if (value.IsBoolean()) { + return new QVariant(value.As().Value()); + } else if (value.IsNumber()) { + if (isNapiValueInt(env, value)) { + return new QVariant(value.As().Int32Value()); + } else { + return new QVariant(value.As().DoubleValue()); + } + } else if (value.IsString()) { + std::string stringValue = value.As().Utf8Value(); + return new QVariant(stringValue.c_str()); + } else if (value.IsSymbol()) { + return new QVariant(); + } else if (value.IsArray()) { + // TODO: fix this + return new QVariant(); + } else if (value.IsArrayBuffer()) { + // TODO: fix this + return new QVariant(); + } else if (value.IsTypedArray()) { + // TODO: fix this + return new QVariant(); + } else if (value.IsObject()) { + // TODO: fix this + return new QVariant(); + } else if (value.IsFunction()) { + return new QVariant(); + } else if (value.IsPromise()) { + return new QVariant(); + } else if (value.IsUndefined()) { + return new QVariant(); + } else if (value.IsNull()) { + return new QVariant(); + } else if (value.IsBuffer()) { + // TODO: fix this + return new QVariant(); + } else if (value.IsExternal()) { + // TODO: fix this + return new QVariant(); + } else { + return new QVariant(); + } +} diff --git a/src/cpp/lib/QtCore/QObject/qobject_wrap.cpp b/src/cpp/lib/QtCore/QObject/qobject_wrap.cpp new file mode 100644 index 000000000..a91825d86 --- /dev/null +++ b/src/cpp/lib/QtCore/QObject/qobject_wrap.cpp @@ -0,0 +1,40 @@ +#include "QtCore/QObject/qobject_wrap.h" + +#include "Extras/Utils/nutils.h" + +Napi::FunctionReference QObjectWrap::constructor; + +Napi::Object QObjectWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "QObject"; + Napi::Function func = DefineClass( + env, CLASSNAME, {QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(QObjectWrap)}); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +NObject* QObjectWrap::getInternalInstance() { return this->instance; } + +QObjectWrap::~QObjectWrap() { extrautils::safeDelete(this->instance); } + +QObjectWrap::QObjectWrap(const Napi::CallbackInfo& info) + : Napi::ObjectWrap(info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + if (info.Length() == 1) { + if (info[0].IsExternal()) { + this->instance = info[0].As>().Data(); + } else { + Napi::Object parentObject = info[0].As(); + QObjectWrap* parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NObject(parentWidgetWrap->getInternalInstance()); + } + } else if (info.Length() == 0) { + this->instance = new NObject(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } +} diff --git a/src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp b/src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp index 0d03551f4..601b29b31 100644 --- a/src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp @@ -40,6 +40,11 @@ QScrollAreaWrap::QScrollAreaWrap(const Napi::CallbackInfo& info) Napi::TypeError::New(env, "Wrong number of arguments") .ThrowAsJavaScriptException(); } + this->instance->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + // Adds measure function on yoga node so that widget size is calculated based + // on its own size. + YGNodeSetMeasureFunc(this->instance->getFlexNode(), + &extrautils::measureQtWidget); } QScrollAreaWrap::~QScrollAreaWrap() { extrautils::safeDelete(this->instance); } diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index db2f0afaa..3bc5d4f3b 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -1,5 +1,6 @@ #include +#include "QtCore/QObject/qobject_wrap.h" #include "QtGui/QApplication/qapplication_wrap.h" #include "QtGui/QClipboard/qclipboard_wrap.h" #include "QtGui/QCursor/qcursor_wrap.h" @@ -36,6 +37,7 @@ void InitPrivateHelpers(Napi::Env env) { Napi::Object Main(Napi::Env env, Napi::Object exports) { InitPrivateHelpers(env); QApplicationWrap::init(env, exports); + QObjectWrap::init(env, exports); QClipboardWrap::init(env, exports); QWidgetWrap::init(env, exports); QPixmapWrap::init(env, exports); diff --git a/src/demo.ts b/src/demo.ts index 010d8cecb..244098799 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -2,6 +2,7 @@ import { QMainWindow } from './index'; import { QWidget } from './lib/QtWidgets/QWidget'; import { FlexLayout } from './lib/core/FlexLayout'; import { QLabel } from './lib/QtWidgets/QLabel'; +import { AlignmentFlag } from './lib/QtEnums'; const win = new QMainWindow(); const view = new QWidget(); @@ -15,7 +16,6 @@ const hello = new QLabel(); hello.setText('Hello'); hello.setStyleSheet(` border: 1px solid blue; - qproperty-alignment: AlignCenter; `); const world = new QLabel(); world.setText('World'); @@ -24,6 +24,8 @@ world.setStyleSheet(` qproperty-alignment: AlignCenter; `); +hello.setProperty('alignment', AlignmentFlag.AlignCenter); + if (view.layout) { view.layout.addWidget(hello); view.layout.addWidget(world); diff --git a/src/index.ts b/src/index.ts index 4c2c129c6..97c5197a9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -37,6 +37,8 @@ export { QScrollArea, QScrollAreaEvents } from './lib/QtWidgets/QScrollArea'; export { QSystemTrayIcon, QSystemTrayIconEvents } from './lib/QtWidgets/QSystemTrayIcon'; export { QAction, QActionEvents } from './lib/QtWidgets/QAction'; export { QShortcut, QShortcutEvents } from './lib/QtWidgets/QShortcut'; +// Core +export { QObject, NodeObject } from './lib/QtCore/QObject'; // Layouts: export { QGridLayout } from './lib/QtWidgets/QGridLayout'; export { FlexLayout } from './lib/core/FlexLayout'; diff --git a/src/lib/QtCore/QObject.ts b/src/lib/QtCore/QObject.ts index 3097e65ff..b44c6fccc 100644 --- a/src/lib/QtCore/QObject.ts +++ b/src/lib/QtCore/QObject.ts @@ -1,7 +1,38 @@ import { EventWidget } from '../core/EventWidget'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; +import addon from '../utils/addon'; -export abstract class QObject extends EventWidget { +export abstract class NodeObject extends EventWidget { inherits(className: string): boolean { return this.native.inherits(className); } + setProperty(name: string, value: any): boolean { + return this.native.setProperty(name, value); + } + setObjectName(objectName: string): void { + this.native.setObjectName(objectName); + } + objectName(): string { + return this.native.objectName(); + } +} + +export class QObject extends NodeObject { + native: NativeElement; + constructor(arg?: NodeObject | NativeElement) { + let native; + let parent; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg as NodeObject) { + parent = arg as NodeObject; + native = new addon.QObject(parent.native); + } else { + native = new addon.QObject(); + } + super(native); + this.nodeParent = parent; + this.native = native; + } } diff --git a/src/lib/QtCore/__tests__/QObject.test.ts b/src/lib/QtCore/__tests__/QObject.test.ts new file mode 100644 index 000000000..696deeaf3 --- /dev/null +++ b/src/lib/QtCore/__tests__/QObject.test.ts @@ -0,0 +1,12 @@ +import { QObject } from '../QObject'; + +describe('QObject', () => { + const component = new QObject(); + it('inherits from QObject', () => { + expect(component.inherits('QObject')).toBe(true); + }); + it('setObjectName', () => { + component.setObjectName('hello'); + expect(component.objectName()).toEqual('hello'); + }); +}); diff --git a/src/lib/QtWidgets/QAction.ts b/src/lib/QtWidgets/QAction.ts index a633cb5a5..dfe40004b 100644 --- a/src/lib/QtWidgets/QAction.ts +++ b/src/lib/QtWidgets/QAction.ts @@ -5,7 +5,7 @@ import { QMenu } from './QMenu'; import { QIcon } from '../QtGui/QIcon'; import { QKeySequence } from '../QtGui/QKeySequence'; import { ShortcutContext } from '../QtEnums'; -import { QObject } from '../QtCore/QObject'; +import { NodeObject } from '../QtCore/QObject'; export const QActionEvents = Object.freeze({ triggered: 'triggered', @@ -13,7 +13,7 @@ export const QActionEvents = Object.freeze({ hovered: 'hovered', toggled: 'toggled', }); -export class QAction extends QObject { +export class QAction extends NodeObject { native: NativeElement; icon?: QIcon; menu?: QMenu; diff --git a/src/lib/QtWidgets/QShortcut.ts b/src/lib/QtWidgets/QShortcut.ts index 7aa13df51..548791889 100644 --- a/src/lib/QtWidgets/QShortcut.ts +++ b/src/lib/QtWidgets/QShortcut.ts @@ -3,14 +3,14 @@ import { NodeWidget } from './QWidget'; import { NativeElement } from '../core/Component'; import { QKeySequence } from '../QtGui/QKeySequence'; import { ShortcutContext } from '../QtEnums'; -import { QObject } from '../QtCore/QObject'; +import { NodeObject } from '../QtCore/QObject'; export const QShortcutEvents = Object.freeze({ activated: 'activated', activatedAmbiguously: 'activatedAmbiguously', }); -export class QShortcut extends QObject { +export class QShortcut extends NodeObject { native: NativeElement; constructor(parent: NodeWidget) { const native = new addon.QShortcut(parent.native); diff --git a/src/lib/QtWidgets/QSystemTrayIcon.ts b/src/lib/QtWidgets/QSystemTrayIcon.ts index e8ff2080d..c95eea897 100644 --- a/src/lib/QtWidgets/QSystemTrayIcon.ts +++ b/src/lib/QtWidgets/QSystemTrayIcon.ts @@ -4,12 +4,12 @@ import { BaseWidgetEvents } from '../core/EventWidget'; import { NativeElement } from '../core/Component'; import { QIcon } from '../QtGui/QIcon'; import { QMenu } from './QMenu'; -import { QObject } from '../QtCore/QObject'; +import { NodeObject } from '../QtCore/QObject'; export const QSystemTrayIconEvents = Object.freeze({ ...BaseWidgetEvents, }); -export class QSystemTrayIcon extends QObject { +export class QSystemTrayIcon extends NodeObject { native: NativeElement; contextMenu?: QMenu; constructor(parent?: NodeWidget) { diff --git a/src/lib/QtWidgets/QWidget.ts b/src/lib/QtWidgets/QWidget.ts index ad9de1a6e..a3d2cc05f 100644 --- a/src/lib/QtWidgets/QWidget.ts +++ b/src/lib/QtWidgets/QWidget.ts @@ -44,12 +44,6 @@ export abstract class NodeWidget extends YogaWidget { geometry(): Rect { return this.native.geometry(); } - setObjectName(objectName: string): void { - this.native.setObjectName(objectName); - } - objectName(): string { - return this.native.objectName(); - } setMouseTracking(isMouseTracked: boolean): void { this.native.setMouseTracking(isMouseTracked); } diff --git a/src/lib/core/YogaWidget.ts b/src/lib/core/YogaWidget.ts index 8686e6dce..27fc2c962 100644 --- a/src/lib/core/YogaWidget.ts +++ b/src/lib/core/YogaWidget.ts @@ -1,7 +1,7 @@ -import { QObject } from '../QtCore/QObject'; +import { NodeObject } from '../QtCore/QObject'; export type FlexNode = {}; -export abstract class YogaWidget extends QObject { +export abstract class YogaWidget extends NodeObject { getFlexNode = (): FlexNode => { return this.native.getFlexNode(); }; diff --git a/tsconfig.json b/tsconfig.json index 10d7bda8c..3f37a638d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,14 @@ { - "compilerOptions": { - "target": "ES2015", - "module": "commonjs", - "declaration": true, - "sourceMap": true, - "outDir": "./dist", - "strict": true, - "moduleResolution": "node", - "esModuleInterop": true, - "resolveJsonModule": true - }, - "include": ["src"] + "compilerOptions": { + "target": "ES2015", + "module": "commonjs", + "declaration": true, + "sourceMap": false, + "outDir": "./dist", + "strict": true, + "moduleResolution": "node", + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["src"] }