From fd270c18ac3fdc82113dd334987e6d51e0761c15 Mon Sep 17 00:00:00 2001 From: mspencer92 Date: Sun, 5 Jan 2020 05:23:49 -0500 Subject: [PATCH] Added QMessageBox (#326) * Added QMessageBox * Adds Qdialog * Fixes inheritance and adds pointer based event listener * Cleans up Qmessagebox so that we create all buttons * change to abstract button * fix rawData fetching from the template * formatting fixes * change to Objectwrap for better type casting * Adds Native element part in qpushbutton * Adds NapiExternal check and use ptr for initialization * Adds all button classes * fix c * fix merge conflicts * lint fix Co-authored-by: Atul R --- CMakeLists.txt | 4 + src/cpp/include/nodegui/Extras/Utils/nutils.h | 11 ++ .../nodegui/QtCore/QObject/qobject_wrap.h | 2 +- .../nodegui/QtCore/QPoint/qpoint_wrap.h | 2 +- .../include/nodegui/QtCore/QRect/qrect_wrap.h | 3 +- .../include/nodegui/QtCore/QSize/qsize_wrap.h | 3 +- .../include/nodegui/QtCore/QUrl/qurl_wrap.h | 3 +- .../nodegui/QtCore/QVariant/qvariant_wrap.h | 2 +- .../QtGui/QApplication/qapplication_wrap.h | 4 +- .../QtGui/QClipboard/qclipboard_wrap.h | 4 +- .../nodegui/QtGui/QColor/qcolor_wrap.h | 2 +- .../nodegui/QtGui/QCursor/qcursor_wrap.h | 3 +- .../QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h | 4 +- .../QEvent/QMouseEvent/qmouseevent_wrap.h | 4 +- .../QtGui/QFontDatabase/qfontdatabase_wrap.h | 4 +- .../include/nodegui/QtGui/QIcon/qicon_wrap.h | 4 +- .../QtGui/QKeySequence/qkeysequence_wrap.h | 4 +- .../nodegui/QtGui/QMovie/qmovie_wrap.h | 3 +- .../nodegui/QtGui/QPixmap/qpixmap_wrap.h | 4 +- .../nodegui/QtGui/QStyle/qstyle_wrap.h | 4 +- .../nodegui/QtWidgets/QAction/qaction_wrap.h | 4 +- .../QtWidgets/QBoxLayout/qboxlayout_wrap.h | 2 +- .../QtWidgets/QCheckBox/qcheckbox_wrap.h | 4 +- .../QtWidgets/QComboBox/qcombobox_wrap.h | 3 +- .../nodegui/QtWidgets/QDial/qdial_wrap.h | 3 +- .../nodegui/QtWidgets/QDialog/ndialog.hpp | 15 +++ .../nodegui/QtWidgets/QDialog/qdialog_macro.h | 75 +++++++++++ .../nodegui/QtWidgets/QDialog/qdialog_wrap.h | 23 ++++ .../QtWidgets/QFileDialog/nfiledialog.hpp | 4 +- .../QtWidgets/QFileDialog/qfiledialog_wrap.h | 6 +- .../QtWidgets/QGridLayout/qgridlayout_wrap.h | 2 +- .../QtWidgets/QGroupBox/qgroupbox_wrap.h | 3 +- .../nodegui/QtWidgets/QLabel/qlabel_wrap.h | 2 +- .../nodegui/QtWidgets/QLayout/qlayout_wrap.h | 2 +- .../QtWidgets/QLineEdit/qlineedit_wrap.h | 3 +- .../QtWidgets/QMainWindow/qmainwindow_wrap.h | 4 +- .../nodegui/QtWidgets/QMenu/qmenu_wrap.h | 3 +- .../QtWidgets/QMenuBar/qmenubar_wrap.h | 3 +- .../QtWidgets/QMessageBox/nmessagebox.hpp | 28 ++++ .../QtWidgets/QMessageBox/qmessagebox_wrap.h | 32 +++++ .../QtWidgets/QPainter/qpainter_wrap.h | 2 +- .../QPlainTextEdit/qplaintextedit_wrap.h | 2 +- .../QProgressBar/qprogressbar_wrap.h | 3 +- .../QtWidgets/QPushButton/qpushbutton_wrap.h | 4 +- .../QRadioButton/qradiobutton_wrap.h | 5 +- .../QtWidgets/QScrollArea/qscrollarea_wrap.h | 3 +- .../QtWidgets/QShortcut/qshortcut_wrap.h | 3 +- .../QtWidgets/QSpinBox/qspinbox_wrap.h | 3 +- .../QStackedWidget/qstackedwidget_wrap.h | 3 +- .../QSystemTrayIcon/qsystemtrayicon_wrap.h | 3 +- .../QtWidgets/QTabWidget/qtabwidget_wrap.h | 3 +- .../QTableWidget/qtablewidget_wrap.h | 3 +- .../QTableWidgetItem/qtablewidgetitem_wrap.h | 3 +- .../QtWidgets/QToolButton/qtoolbutton_wrap.h | 4 +- .../QtWidgets/QTreeWidget/qtreewidget_wrap.h | 2 +- .../QTreeWidgetItem/qtreewidgetitem_wrap.h | 2 +- .../nodegui/QtWidgets/QWidget/qwidget_macro.h | 2 +- .../nodegui/QtWidgets/QWidget/qwidget_wrap.h | 2 +- .../nodegui/core/Component/component_macro.h | 4 +- .../nodegui/core/Events/eventwidget_macro.h | 2 +- .../nodegui/core/FlexLayout/flexlayout_wrap.h | 2 +- src/cpp/lib/Extras/Utils/nutils.cpp | 31 ++++- .../QtCore/QModelIndex/qmodelindex_wrap.cpp | 3 +- src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp | 2 +- src/cpp/lib/QtCore/QRect/qrect_wrap.cpp | 2 +- src/cpp/lib/QtCore/QSize/qsize_wrap.cpp | 2 +- src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp | 2 +- src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp | 2 +- .../QtGui/QApplication/qapplication_wrap.cpp | 2 +- .../lib/QtGui/QClipboard/qclipboard_wrap.cpp | 2 +- src/cpp/lib/QtGui/QColor/qcolor_wrap.cpp | 2 +- src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp | 2 +- .../QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp | 2 +- .../QEvent/QMouseEvent/qmouseevent_wrap.cpp | 2 +- src/cpp/lib/QtGui/QFont/qfont_wrap.cpp | 3 +- .../QFontDatabase/qfontdatabase_wrap.cpp | 2 +- src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp | 2 +- .../QtGui/QKeySequence/qkeysequence_wrap.cpp | 2 +- src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp | 2 +- src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp | 2 +- .../QtWidgets/QCheckBox/qcheckbox_wrap.cpp | 32 +++-- .../lib/QtWidgets/QDialog/qdialog_wrap.cpp | 44 +++++++ .../QFileDialog/qfiledialog_wrap.cpp | 12 +- .../QListWidgetItem/qlistwidgetitem_wrap.cpp | 2 +- .../QMessageBox/qmessagebox_wrap.cpp | 121 ++++++++++++++++++ .../lib/QtWidgets/QPainter/qpainter_wrap.cpp | 2 +- .../QPushButton/qpushbutton_wrap.cpp | 34 +++-- .../QRadioButton/qradiobutton_wrap.cpp | 32 +++-- .../qtablewidgetitem_wrap.cpp | 2 +- .../QToolButton/qtoolbutton_wrap.cpp | 32 +++-- .../QTreeWidgetItem/qtreewidgetitem_wrap.cpp | 2 +- src/cpp/main.cpp | 6 + src/demo.ts | 100 +++------------ src/index.ts | 4 +- src/lib/QtCore/QObject.ts | 2 +- src/lib/QtWidgets/QCheckBox.ts | 19 ++- src/lib/QtWidgets/QDialog.ts | 58 +++++++++ src/lib/QtWidgets/QFileDialog.ts | 10 +- src/lib/QtWidgets/QMessageBox.ts | 111 ++++++++++++++++ src/lib/QtWidgets/QPushButton.ts | 20 ++- src/lib/QtWidgets/QRadioButton.ts | 19 ++- src/lib/QtWidgets/QToolButton.ts | 18 ++- src/lib/core/Component.ts | 2 + src/lib/core/EventWidget.ts | 6 +- src/lib/core/YogaWidget.ts | 3 +- src/lib/utils/helpers.ts | 5 + 106 files changed, 840 insertions(+), 282 deletions(-) create mode 100644 src/cpp/include/nodegui/QtWidgets/QDialog/ndialog.hpp create mode 100644 src/cpp/include/nodegui/QtWidgets/QDialog/qdialog_macro.h create mode 100644 src/cpp/include/nodegui/QtWidgets/QDialog/qdialog_wrap.h create mode 100644 src/cpp/include/nodegui/QtWidgets/QMessageBox/nmessagebox.hpp create mode 100644 src/cpp/include/nodegui/QtWidgets/QMessageBox/qmessagebox_wrap.h create mode 100644 src/cpp/lib/QtWidgets/QDialog/qdialog_wrap.cpp create mode 100644 src/cpp/lib/QtWidgets/QMessageBox/qmessagebox_wrap.cpp create mode 100644 src/lib/QtWidgets/QDialog.ts create mode 100644 src/lib/QtWidgets/QMessageBox.ts diff --git a/CMakeLists.txt b/CMakeLists.txt index d29b4f1ba..2e4f970f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QWidget/qwidget_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDialog/qdialog_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QBoxLayout/qboxlayout_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QComboBox/qcombobox_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QFileDialog/qfiledialog_wrap.cpp" @@ -89,12 +90,14 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QGroupBox/qgroupbox_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTreeWidget/qtreewidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QMessageBox/qmessagebox_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/core/FlexLayout/flexlayout.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtGui/QMovie/nmovie.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDialog/ndialog.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLabel/nlabel.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QCheckBox/ncheckbox.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDial/ndial.hpp" @@ -105,6 +108,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QMainWindow/nmainwindow.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QProgressBar/nprogressbar.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QPushButton/npushbutton.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QMessageBox/nmessagebox.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QToolButton/ntoolbutton.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QSpinBox/nspinbox.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QRadioButton/nradiobutton.hpp" diff --git a/src/cpp/include/nodegui/Extras/Utils/nutils.h b/src/cpp/include/nodegui/Extras/Utils/nutils.h index d57737b2f..2ec3165f4 100644 --- a/src/cpp/include/nodegui/Extras/Utils/nutils.h +++ b/src/cpp/include/nodegui/Extras/Utils/nutils.h @@ -25,3 +25,14 @@ void safeDelete(QPointer& component) { } void initAppSettings(); } // namespace extrautils + +class NUtilsWrap : public Napi::ObjectWrap { + public: + static Napi::Object init(Napi::Env env, Napi::Object exports); + NUtilsWrap(const Napi::CallbackInfo& info); + static Napi::FunctionReference constructor; +}; + +namespace StaticNUtilsWrapMethods { +Napi::Value isNapiExternal(const Napi::CallbackInfo& info); +} // namespace StaticNUtilsWrapMethods \ No newline at end of file diff --git a/src/cpp/include/nodegui/QtCore/QObject/qobject_wrap.h b/src/cpp/include/nodegui/QtCore/QObject/qobject_wrap.h index 59bb21345..c34a65b0c 100644 --- a/src/cpp/include/nodegui/QtCore/QObject/qobject_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QObject/qobject_wrap.h @@ -8,6 +8,7 @@ #include "QtCore/QObject/qobject_macro.h" class QObjectWrap : public Napi::ObjectWrap { + QOBJECT_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -19,5 +20,4 @@ class QObjectWrap : public Napi::ObjectWrap { // class constructor static Napi::FunctionReference constructor; // wrapped methods - QOBJECT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtCore/QPoint/qpoint_wrap.h b/src/cpp/include/nodegui/QtCore/QPoint/qpoint_wrap.h index c92520cc6..31b615b9e 100644 --- a/src/cpp/include/nodegui/QtCore/QPoint/qpoint_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QPoint/qpoint_wrap.h @@ -7,6 +7,7 @@ #include "core/Component/component_macro.h" class QPointWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: std::unique_ptr instance; @@ -21,7 +22,6 @@ class QPointWrap : public Napi::ObjectWrap { Napi::Value setY(const Napi::CallbackInfo& info); Napi::Value x(const Napi::CallbackInfo& info); Napi::Value y(const Napi::CallbackInfo& info); - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQPointWrapMethods { diff --git a/src/cpp/include/nodegui/QtCore/QRect/qrect_wrap.h b/src/cpp/include/nodegui/QtCore/QRect/qrect_wrap.h index 9ec4bd9f0..1861f55ee 100644 --- a/src/cpp/include/nodegui/QtCore/QRect/qrect_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QRect/qrect_wrap.h @@ -7,6 +7,7 @@ #include "core/Component/component_macro.h" class QRectWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: std::unique_ptr instance; @@ -25,8 +26,6 @@ class QRectWrap : public Napi::ObjectWrap { Napi::Value width(const Napi::CallbackInfo& info); Napi::Value left(const Napi::CallbackInfo& info); Napi::Value top(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQRectWrapMethods { diff --git a/src/cpp/include/nodegui/QtCore/QSize/qsize_wrap.h b/src/cpp/include/nodegui/QtCore/QSize/qsize_wrap.h index 0b5cf9e7c..d75d5941b 100644 --- a/src/cpp/include/nodegui/QtCore/QSize/qsize_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QSize/qsize_wrap.h @@ -7,6 +7,7 @@ #include "core/Component/component_macro.h" class QSizeWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: std::unique_ptr instance; @@ -21,8 +22,6 @@ class QSizeWrap : public Napi::ObjectWrap { Napi::Value setWidth(const Napi::CallbackInfo& info); Napi::Value height(const Napi::CallbackInfo& info); Napi::Value width(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQSizeWrapMethods { diff --git a/src/cpp/include/nodegui/QtCore/QUrl/qurl_wrap.h b/src/cpp/include/nodegui/QtCore/QUrl/qurl_wrap.h index 65d1c3b7f..9143c4868 100644 --- a/src/cpp/include/nodegui/QtCore/QUrl/qurl_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QUrl/qurl_wrap.h @@ -7,6 +7,7 @@ #include "core/Component/component_macro.h" class QUrlWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: std::unique_ptr instance; @@ -19,8 +20,6 @@ class QUrlWrap : public Napi::ObjectWrap { // Wrapped methods Napi::Value setUrl(const Napi::CallbackInfo& info); Napi::Value toString(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQUrlWrapMethods { diff --git a/src/cpp/include/nodegui/QtCore/QVariant/qvariant_wrap.h b/src/cpp/include/nodegui/QtCore/QVariant/qvariant_wrap.h index 3ac4a040e..4500ec2c6 100644 --- a/src/cpp/include/nodegui/QtCore/QVariant/qvariant_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QVariant/qvariant_wrap.h @@ -7,6 +7,7 @@ #include "core/Component/component_macro.h" class QVariantWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: QSharedPointer instance; @@ -21,7 +22,6 @@ class QVariantWrap : public Napi::ObjectWrap { Napi::Value toDouble(const Napi::CallbackInfo& info); Napi::Value toBool(const Napi::CallbackInfo& info); // wrapped methods - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQVariantWrapMethods { diff --git a/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h index bb15ecbdd..2bb5ed0f8 100644 --- a/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h @@ -8,6 +8,8 @@ #include "core/Component/component_macro.h" class QApplicationWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: QPointer instance; static int argc; @@ -27,8 +29,6 @@ class QApplicationWrap : public Napi::ObjectWrap { Napi::Value exit(const Napi::CallbackInfo& info); Napi::Value setQuitOnLastWindowClosed(const Napi::CallbackInfo& info); Napi::Value quitOnLastWindowClosed(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQApplicationWrapMethods { diff --git a/src/cpp/include/nodegui/QtGui/QClipboard/qclipboard_wrap.h b/src/cpp/include/nodegui/QtGui/QClipboard/qclipboard_wrap.h index edf48c685..572c11980 100644 --- a/src/cpp/include/nodegui/QtGui/QClipboard/qclipboard_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QClipboard/qclipboard_wrap.h @@ -7,6 +7,8 @@ #include "core/Component/component_macro.h" class QClipboardWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: QClipboard* instance; @@ -19,6 +21,4 @@ class QClipboardWrap : public Napi::ObjectWrap { Napi::Value clear(const Napi::CallbackInfo& info); Napi::Value setText(const Napi::CallbackInfo& info); Napi::Value text(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtGui/QColor/qcolor_wrap.h b/src/cpp/include/nodegui/QtGui/QColor/qcolor_wrap.h index ac779af51..13df401ac 100644 --- a/src/cpp/include/nodegui/QtGui/QColor/qcolor_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QColor/qcolor_wrap.h @@ -7,6 +7,7 @@ #include "core/Component/component_macro.h" class QColorWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: std::unique_ptr instance; @@ -25,7 +26,6 @@ class QColorWrap : public Napi::ObjectWrap { Napi::Value blue(const Napi::CallbackInfo& info); Napi::Value setAlpha(const Napi::CallbackInfo& info); Napi::Value alpha(const Napi::CallbackInfo& info); - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQColorWrapMethods { diff --git a/src/cpp/include/nodegui/QtGui/QCursor/qcursor_wrap.h b/src/cpp/include/nodegui/QtGui/QCursor/qcursor_wrap.h index 5d9837c36..90752d524 100644 --- a/src/cpp/include/nodegui/QtGui/QCursor/qcursor_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QCursor/qcursor_wrap.h @@ -7,6 +7,7 @@ #include "core/Component/component_macro.h" class QCursorWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: std::unique_ptr instance; @@ -19,6 +20,4 @@ class QCursorWrap : public Napi::ObjectWrap { // Wrapped methods Napi::Value pos(const Napi::CallbackInfo& info); Napi::Value setPos(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h b/src/cpp/include/nodegui/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h index b10e5544a..62fd15bf4 100644 --- a/src/cpp/include/nodegui/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h @@ -7,6 +7,8 @@ #include "core/Component/component_macro.h" class QKeyEventWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: QKeyEvent* instance; @@ -23,6 +25,4 @@ class QKeyEventWrap : public Napi::ObjectWrap { Napi::Value modifiers(const Napi::CallbackInfo& info); Napi::Value count(const Napi::CallbackInfo& info); Napi::Value isAutoRepeat(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; \ No newline at end of file diff --git a/src/cpp/include/nodegui/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.h b/src/cpp/include/nodegui/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.h index 3823d4ed1..5cf029f0b 100644 --- a/src/cpp/include/nodegui/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.h @@ -7,6 +7,8 @@ #include "core/Component/component_macro.h" class QMouseEventWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: QMouseEvent* instance; @@ -23,6 +25,4 @@ class QMouseEventWrap : public Napi::ObjectWrap { Napi::Value y(const Napi::CallbackInfo& info); Napi::Value globalX(const Napi::CallbackInfo& info); Napi::Value globalY(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; \ No newline at end of file diff --git a/src/cpp/include/nodegui/QtGui/QFontDatabase/qfontdatabase_wrap.h b/src/cpp/include/nodegui/QtGui/QFontDatabase/qfontdatabase_wrap.h index 0be0e4858..9d88a8cce 100644 --- a/src/cpp/include/nodegui/QtGui/QFontDatabase/qfontdatabase_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QFontDatabase/qfontdatabase_wrap.h @@ -7,6 +7,8 @@ #include "core/Component/component_macro.h" class QFontDatabaseWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: std::unique_ptr instance; @@ -19,8 +21,6 @@ class QFontDatabaseWrap : public Napi::ObjectWrap { Napi::Value bold(const Napi::CallbackInfo& info); Napi::Value italic(const Napi::CallbackInfo& info); Napi::Value weight(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQFontDatabaseWrapMethods { diff --git a/src/cpp/include/nodegui/QtGui/QIcon/qicon_wrap.h b/src/cpp/include/nodegui/QtGui/QIcon/qicon_wrap.h index 58732d0f2..c840ec566 100644 --- a/src/cpp/include/nodegui/QtGui/QIcon/qicon_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QIcon/qicon_wrap.h @@ -7,6 +7,8 @@ #include "core/Component/component_macro.h" class QIconWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: std::unique_ptr instance; @@ -21,8 +23,6 @@ class QIconWrap : public Napi::ObjectWrap { Napi::Value isMask(const Napi::CallbackInfo& info); Napi::Value setIsMask(const Napi::CallbackInfo& info); Napi::Value cacheKey(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQIconWrapMethods { diff --git a/src/cpp/include/nodegui/QtGui/QKeySequence/qkeysequence_wrap.h b/src/cpp/include/nodegui/QtGui/QKeySequence/qkeysequence_wrap.h index 3ca538ff3..12fcd1cd8 100644 --- a/src/cpp/include/nodegui/QtGui/QKeySequence/qkeysequence_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QKeySequence/qkeysequence_wrap.h @@ -7,6 +7,8 @@ #include "core/Component/component_macro.h" class QKeySequenceWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: std::unique_ptr instance; @@ -18,6 +20,4 @@ class QKeySequenceWrap : public Napi::ObjectWrap { QKeySequence *getInternalInstance(); // Wrapped methods Napi::Value count(const Napi::CallbackInfo &info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtGui/QMovie/qmovie_wrap.h b/src/cpp/include/nodegui/QtGui/QMovie/qmovie_wrap.h index 95d0ec453..483329e69 100644 --- a/src/cpp/include/nodegui/QtGui/QMovie/qmovie_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QMovie/qmovie_wrap.h @@ -8,6 +8,8 @@ #include "nmovie.hpp" class QMovieWrap : public Napi::ObjectWrap { + QOBJECT_WRAPPED_METHODS_DECLARATION + private: QPointer instance; @@ -33,5 +35,4 @@ class QMovieWrap : public Napi::ObjectWrap { Napi::Value currentFrameNumber(const Napi::CallbackInfo& info); Napi::Value currentPixmap(const Napi::CallbackInfo& info); Napi::Value loadFromData(const Napi::CallbackInfo& info); - QOBJECT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h b/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h index 57a0561fa..9a10c9e64 100644 --- a/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h @@ -7,6 +7,8 @@ #include "core/Component/component_macro.h" class QPixmapWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: std::unique_ptr instance; @@ -23,8 +25,6 @@ class QPixmapWrap : public Napi::ObjectWrap { Napi::Value scaled(const Napi::CallbackInfo& info); Napi::Value height(const Napi::CallbackInfo& info); Napi::Value width(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; namespace StaticQPixmapWrapMethods { diff --git a/src/cpp/include/nodegui/QtGui/QStyle/qstyle_wrap.h b/src/cpp/include/nodegui/QtGui/QStyle/qstyle_wrap.h index 5fcad2e14..39d3bdce1 100644 --- a/src/cpp/include/nodegui/QtGui/QStyle/qstyle_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QStyle/qstyle_wrap.h @@ -7,6 +7,8 @@ #include "core/Component/component_macro.h" class QStyleWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: QStyle* instance; @@ -17,6 +19,4 @@ class QStyleWrap : public Napi::ObjectWrap { QStyle* getInternalInstance(); // Wrapped methods Napi::Value pixelMetric(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QAction/qaction_wrap.h b/src/cpp/include/nodegui/QtWidgets/QAction/qaction_wrap.h index e6c0c8be3..c58b2d826 100644 --- a/src/cpp/include/nodegui/QtWidgets/QAction/qaction_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QAction/qaction_wrap.h @@ -7,6 +7,8 @@ #include "QtCore/QObject/qobject_macro.h" #include "naction.hpp" class QActionWrap : public Napi::ObjectWrap { + QOBJECT_WRAPPED_METHODS_DECLARATION + private: QPointer instance; bool disableDeletion; @@ -32,6 +34,4 @@ class QActionWrap : public Napi::ObjectWrap { Napi::Value isSeparator(const Napi::CallbackInfo& info); Napi::Value setSeparator(const Napi::CallbackInfo& info); Napi::Value setFont(const Napi::CallbackInfo& info); - - QOBJECT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QBoxLayout/qboxlayout_wrap.h b/src/cpp/include/nodegui/QtWidgets/QBoxLayout/qboxlayout_wrap.h index 67bd663f2..e1dba62cb 100644 --- a/src/cpp/include/nodegui/QtWidgets/QBoxLayout/qboxlayout_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QBoxLayout/qboxlayout_wrap.h @@ -9,6 +9,7 @@ #include "QtWidgets/QLayout/qlayout_macro.h" class QBoxLayoutWrap : public Napi::ObjectWrap { + QLAYOUT_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -30,5 +31,4 @@ class QBoxLayoutWrap : public Napi::ObjectWrap { Napi::Value insertLayout(const Napi::CallbackInfo& info); Napi::Value removeWidget(const Napi::CallbackInfo& info); Napi::Value setDirection(const Napi::CallbackInfo& info); - QLAYOUT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QCheckBox/qcheckbox_wrap.h b/src/cpp/include/nodegui/QtWidgets/QCheckBox/qcheckbox_wrap.h index 318f58a0a..59f8ce692 100644 --- a/src/cpp/include/nodegui/QtWidgets/QCheckBox/qcheckbox_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QCheckBox/qcheckbox_wrap.h @@ -9,8 +9,10 @@ #include "ncheckbox.hpp" class QCheckBoxWrap : public Napi::ObjectWrap { + QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION private: QPointer instance; + bool disableDeletion; public: static Napi::Object init(Napi::Env env, Napi::Object exports); @@ -22,6 +24,4 @@ class QCheckBoxWrap : public Napi::ObjectWrap { // wrapped methods Napi::Value isChecked(const Napi::CallbackInfo& info); Napi::Value setChecked(const Napi::CallbackInfo& info); - - QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QComboBox/qcombobox_wrap.h b/src/cpp/include/nodegui/QtWidgets/QComboBox/qcombobox_wrap.h index 56b09f098..05afb8010 100644 --- a/src/cpp/include/nodegui/QtWidgets/QComboBox/qcombobox_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QComboBox/qcombobox_wrap.h @@ -9,6 +9,7 @@ #include "QtWidgets/QWidget/qwidget_macro.h" class QComboBoxWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -37,6 +38,4 @@ class QComboBoxWrap : public Napi::ObjectWrap { Napi::Value isEditable(const Napi::CallbackInfo& info); Napi::Value setEditable(const Napi::CallbackInfo& info); Napi::Value clear(const Napi::CallbackInfo& info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QDial/qdial_wrap.h b/src/cpp/include/nodegui/QtWidgets/QDial/qdial_wrap.h index 53b3e066f..2609664a3 100644 --- a/src/cpp/include/nodegui/QtWidgets/QDial/qdial_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QDial/qdial_wrap.h @@ -9,6 +9,7 @@ #include "ndial.hpp" class QDialWrap : public Napi::ObjectWrap { + QABSTRACTSLIDER_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -26,6 +27,4 @@ class QDialWrap : public Napi::ObjectWrap { Napi::Value notchTarget(const Napi::CallbackInfo& info); Napi::Value notchesVisible(const Napi::CallbackInfo& info); Napi::Value wrapping(const Napi::CallbackInfo& info); - - QABSTRACTSLIDER_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QDialog/ndialog.hpp b/src/cpp/include/nodegui/QtWidgets/QDialog/ndialog.hpp new file mode 100644 index 000000000..be7aa8c9d --- /dev/null +++ b/src/cpp/include/nodegui/QtWidgets/QDialog/ndialog.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include + +#include "QtWidgets/QDialog/qdialog_macro.h" +#include "core/NodeWidget/nodewidget.h" + +class NDialog : public QDialog, public NodeWidget { + Q_OBJECT + NODEWIDGET_IMPLEMENTATIONS(QDialog) + public: + using QDialog::QDialog; + + void connectSignalsToEventEmitter() { QDIALOG_SIGNALS } +}; diff --git a/src/cpp/include/nodegui/QtWidgets/QDialog/qdialog_macro.h b/src/cpp/include/nodegui/QtWidgets/QDialog/qdialog_macro.h new file mode 100644 index 000000000..ffe0bce52 --- /dev/null +++ b/src/cpp/include/nodegui/QtWidgets/QDialog/qdialog_macro.h @@ -0,0 +1,75 @@ +#pragma once + +#include + +#include "QtCore/QSize/qsize_wrap.h" +#include "QtGui/QIcon/qicon_wrap.h" +#include "QtWidgets/QLayout/qlayout_wrap.h" +#include "QtWidgets/QWidget/qwidget_macro.h" +/* + + This macro adds common QDialog exported methods + The exported methods are taken into this macro to avoid writing them in each + and every widget we export. + */ + +#ifndef QDIALOG_WRAPPED_METHODS_DECLARATION +#define QDIALOG_WRAPPED_METHODS_DECLARATION \ + \ + QWIDGET_WRAPPED_METHODS_DECLARATION \ + \ + Napi::Value setResult(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number result = info[0].As(); \ + this->instance->setResult(result.Int32Value()); \ + return env.Null(); \ + } \ + Napi::Value result(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + int value = this->instance->result(); \ + return Napi::Value::From(env, value); \ + } \ + Napi::Value exec(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + this->instance->exec(); \ + return env.Null(); \ + } \ + Napi::Value open(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + this->instance->open(); \ + return env.Null(); \ + } \ + Napi::Value reject(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + this->instance->reject(); \ + return env.Null(); \ + } +#endif + +#ifndef QDIALOG_WRAPPED_METHODS_EXPORT_DEFINE +#define QDIALOG_WRAPPED_METHODS_EXPORT_DEFINE(DialogWrapName) \ + \ + QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(DialogWrapName) \ + InstanceMethod("result", &DialogWrapName::result), \ + InstanceMethod("setResult", &DialogWrapName::setResult), \ + InstanceMethod("exec", &DialogWrapName::exec), \ + InstanceMethod("open", &DialogWrapName::open), \ + InstanceMethod("reject", &DialogWrapName::reject), + +#endif // QDIALOG_WRAPPED_METHODS_EXPORT_DEFINE + +#ifndef QDIALOG_SIGNALS +#define QDIALOG_SIGNALS \ + QWIDGET_SIGNALS \ + QObject::connect(this, &QDialog::accepted, [=]() { \ + Napi::Env env = this->emitOnNode.Env(); \ + Napi::HandleScope scope(env); \ + this->emitOnNode.Call({Napi::String::New(env, "accepted")}); \ + }); + +#endif // QDIALOG_SIGNALS diff --git a/src/cpp/include/nodegui/QtWidgets/QDialog/qdialog_wrap.h b/src/cpp/include/nodegui/QtWidgets/QDialog/qdialog_wrap.h new file mode 100644 index 000000000..1b2f6f96b --- /dev/null +++ b/src/cpp/include/nodegui/QtWidgets/QDialog/qdialog_wrap.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include + +#include "QtWidgets/QDialog/qdialog_macro.h" +#include "ndialog.hpp" + +class QDialogWrap : public Napi::ObjectWrap { + QDIALOG_WRAPPED_METHODS_DECLARATION + private: + QPointer instance; + + public: + static Napi::Object init(Napi::Env env, Napi::Object exports); + QDialogWrap(const Napi::CallbackInfo& info); + ~QDialogWrap(); + NDialog* getInternalInstance(); + // class constructor + static Napi::FunctionReference constructor; + // wrapped methods +}; diff --git a/src/cpp/include/nodegui/QtWidgets/QFileDialog/nfiledialog.hpp b/src/cpp/include/nodegui/QtWidgets/QFileDialog/nfiledialog.hpp index 070c76c69..c3d26d6e8 100644 --- a/src/cpp/include/nodegui/QtWidgets/QFileDialog/nfiledialog.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QFileDialog/nfiledialog.hpp @@ -2,7 +2,7 @@ #include -#include "QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QDialog/qdialog_macro.h" #include "core/NodeWidget/nodewidget.h" #include "napi.h" @@ -13,7 +13,7 @@ class NFileDialog : public QFileDialog, public NodeWidget { using QFileDialog::QFileDialog; void connectSignalsToEventEmitter() { - QWIDGET_SIGNALS + QDIALOG_SIGNALS // Qt Connects: Implement all signal connects here QObject::connect( this, &QFileDialog::currentChanged, [=](const QString &path) { diff --git a/src/cpp/include/nodegui/QtWidgets/QFileDialog/qfiledialog_wrap.h b/src/cpp/include/nodegui/QtWidgets/QFileDialog/qfiledialog_wrap.h index 2d939c94b..720bd012f 100644 --- a/src/cpp/include/nodegui/QtWidgets/QFileDialog/qfiledialog_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QFileDialog/qfiledialog_wrap.h @@ -5,10 +5,11 @@ #include #include "Extras/Utils/nutils.h" +#include "QtWidgets/QDialog/qdialog_macro.h" #include "QtWidgets/QFileDialog/nfiledialog.hpp" -#include "QtWidgets/QWidget/qwidget_macro.h" class QFileDialogWrap : public Napi::ObjectWrap { + QDIALOG_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -20,12 +21,9 @@ class QFileDialogWrap : public Napi::ObjectWrap { // class constructor static Napi::FunctionReference constructor; // wrapped methods - Napi::Value open(const Napi::CallbackInfo& info); Napi::Value supportedSchemes(const Napi::CallbackInfo& info); Napi::Value setSupportedSchemes(const Napi::CallbackInfo& info); Napi::Value labelText(const Napi::CallbackInfo& info); Napi::Value setLabelText(const Napi::CallbackInfo& info); Napi::Value setOption(const Napi::CallbackInfo& info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h b/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h index 928e7b683..567d82111 100644 --- a/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h @@ -9,6 +9,7 @@ #include "QtWidgets/QLayout/qlayout_macro.h" class QGridLayoutWrap : public Napi::ObjectWrap { + QLAYOUT_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -22,5 +23,4 @@ class QGridLayoutWrap : public Napi::ObjectWrap { // wrapped methods Napi::Value addWidget(const Napi::CallbackInfo& info); Napi::Value removeWidget(const Napi::CallbackInfo& info); - QLAYOUT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QGroupBox/qgroupbox_wrap.h b/src/cpp/include/nodegui/QtWidgets/QGroupBox/qgroupbox_wrap.h index d12126c14..4f9fcc399 100644 --- a/src/cpp/include/nodegui/QtWidgets/QGroupBox/qgroupbox_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QGroupBox/qgroupbox_wrap.h @@ -8,6 +8,7 @@ #include "ngroupbox.hpp" class QGroupBoxWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -29,6 +30,4 @@ class QGroupBoxWrap : public Napi::ObjectWrap { Napi::Value setTitle(const Napi::CallbackInfo& info); Napi::Value title(const Napi::CallbackInfo& info); Napi::Value setChecked(const Napi::CallbackInfo& info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QLabel/qlabel_wrap.h b/src/cpp/include/nodegui/QtWidgets/QLabel/qlabel_wrap.h index 339dd938d..85ff5648a 100644 --- a/src/cpp/include/nodegui/QtWidgets/QLabel/qlabel_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QLabel/qlabel_wrap.h @@ -8,11 +8,11 @@ #include "nlabel.hpp" class QLabelWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; public: - QWIDGET_WRAPPED_METHODS_DECLARATION static Napi::Object init(Napi::Env env, Napi::Object exports); QLabelWrap(const Napi::CallbackInfo& info); ~QLabelWrap(); diff --git a/src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_wrap.h b/src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_wrap.h index e2b8a9de7..7f97a2d4d 100644 --- a/src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_wrap.h @@ -10,6 +10,7 @@ // ABSTRACT CLASS class QLayoutWrap : public Napi::ObjectWrap { + QLAYOUT_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -21,5 +22,4 @@ class QLayoutWrap : public Napi::ObjectWrap { // class constructor static Napi::FunctionReference constructor; // wrapped methods - QLAYOUT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QLineEdit/qlineedit_wrap.h b/src/cpp/include/nodegui/QtWidgets/QLineEdit/qlineedit_wrap.h index 8350ee1f4..67be6833e 100644 --- a/src/cpp/include/nodegui/QtWidgets/QLineEdit/qlineedit_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QLineEdit/qlineedit_wrap.h @@ -8,6 +8,7 @@ #include "nlineedit.hpp" class QLineEditWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -25,6 +26,4 @@ class QLineEditWrap : public Napi::ObjectWrap { Napi::Value setReadOnly(const Napi::CallbackInfo& info); Napi::Value clear(const Napi::CallbackInfo& info); Napi::Value setEchoMode(const Napi::CallbackInfo& info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QMainWindow/qmainwindow_wrap.h b/src/cpp/include/nodegui/QtWidgets/QMainWindow/qmainwindow_wrap.h index 89383fbb5..fab35566a 100644 --- a/src/cpp/include/nodegui/QtWidgets/QMainWindow/qmainwindow_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QMainWindow/qmainwindow_wrap.h @@ -8,6 +8,8 @@ #include "nmainwindow.hpp" class QMainWindowWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION + private: QPointer instance; @@ -25,6 +27,4 @@ class QMainWindowWrap : public Napi::ObjectWrap { Napi::Value menuBar(const Napi::CallbackInfo& info); Napi::Value setMenuWidget(const Napi::CallbackInfo& info); Napi::Value center(const Napi::CallbackInfo& info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QMenu/qmenu_wrap.h b/src/cpp/include/nodegui/QtWidgets/QMenu/qmenu_wrap.h index 0e53fcb6a..f70a58329 100644 --- a/src/cpp/include/nodegui/QtWidgets/QMenu/qmenu_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QMenu/qmenu_wrap.h @@ -7,6 +7,7 @@ #include "nmenu.hpp" class QMenuWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -19,6 +20,4 @@ class QMenuWrap : public Napi::ObjectWrap { // wrapped methods Napi::Value setTitle(const Napi::CallbackInfo& info); Napi::Value addAction(const Napi::CallbackInfo& info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QMenuBar/qmenubar_wrap.h b/src/cpp/include/nodegui/QtWidgets/QMenuBar/qmenubar_wrap.h index 674b272b0..3f0bacba6 100644 --- a/src/cpp/include/nodegui/QtWidgets/QMenuBar/qmenubar_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QMenuBar/qmenubar_wrap.h @@ -7,6 +7,7 @@ #include "nmenubar.hpp" class QMenuBarWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -19,6 +20,4 @@ class QMenuBarWrap : public Napi::ObjectWrap { // wrapped methods Napi::Value addMenu(const Napi::CallbackInfo& info); Napi::Value setNativeMenuBar(const Napi::CallbackInfo& info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QMessageBox/nmessagebox.hpp b/src/cpp/include/nodegui/QtWidgets/QMessageBox/nmessagebox.hpp new file mode 100644 index 000000000..487c11b20 --- /dev/null +++ b/src/cpp/include/nodegui/QtWidgets/QMessageBox/nmessagebox.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#include "QtWidgets/QDialog/qdialog_macro.h" +#include "QtWidgets/QPushButton/qpushbutton_wrap.h" +#include "core/NodeWidget/nodewidget.h" +#include "napi.h" + +class NMessageBox : public QMessageBox, public NodeWidget { + public: + Q_OBJECT + NODEWIDGET_IMPLEMENTATIONS(QMessageBox) + using QMessageBox::QMessageBox; + + void connectSignalsToEventEmitter() { + QDIALOG_SIGNALS + QObject::connect( + this, &QMessageBox::buttonClicked, [=](QAbstractButton* button) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + auto value = Napi::External::New(env, button); + this->emitOnNode.Call( + {Napi::String::New(env, "buttonClicked"), value}); + }); + } +}; diff --git a/src/cpp/include/nodegui/QtWidgets/QMessageBox/qmessagebox_wrap.h b/src/cpp/include/nodegui/QtWidgets/QMessageBox/qmessagebox_wrap.h new file mode 100644 index 000000000..2670ade44 --- /dev/null +++ b/src/cpp/include/nodegui/QtWidgets/QMessageBox/qmessagebox_wrap.h @@ -0,0 +1,32 @@ +#pragma once + +#include + +#include + +#include "Extras/Utils/nutils.h" +#include "QtWidgets/QMessageBox/nmessagebox.hpp" +#include "QtWidgets/QWidget/qwidget_macro.h" + +class QMessageBoxWrap : public Napi::ObjectWrap { + QDIALOG_WRAPPED_METHODS_DECLARATION + private: + QPointer instance; + + public: + static Napi::Object init(Napi::Env env, Napi::Object exports); + QMessageBoxWrap(const Napi::CallbackInfo& info); + ~QMessageBoxWrap(); + NMessageBox* getInternalInstance(); + // class constructor + static Napi::FunctionReference constructor; + // wrapped methods + Napi::Value setDefaultButton(const Napi::CallbackInfo& info); + Napi::Value addButton(const Napi::CallbackInfo& info); + Napi::Value accept(const Napi::CallbackInfo& info); + Napi::Value done(const Napi::CallbackInfo& info); +}; +namespace StaticQMessageBoxWrapMethods { +Napi::Value about(const Napi::CallbackInfo& info); +Napi::Value aboutQt(const Napi::CallbackInfo& info); +}; // namespace StaticQMessageBoxWrapMethods diff --git a/src/cpp/include/nodegui/QtWidgets/QPainter/qpainter_wrap.h b/src/cpp/include/nodegui/QtWidgets/QPainter/qpainter_wrap.h index c049e6f96..0aea85a40 100644 --- a/src/cpp/include/nodegui/QtWidgets/QPainter/qpainter_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QPainter/qpainter_wrap.h @@ -8,6 +8,7 @@ #include "core/Component/component_wrap.h" class QPainterWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: QPainter* instance; @@ -32,5 +33,4 @@ class QPainterWrap : public Napi::ObjectWrap { Napi::Value drawConvexPolygon(const Napi::CallbackInfo& info); Napi::Value save(const Napi::CallbackInfo& info); Napi::Value restore(const Napi::CallbackInfo& info); - COMPONENT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index ec1588372..c1f684625 100644 --- a/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -9,6 +9,7 @@ #include "nplaintextedit.hpp" class QPlainTextEditWrap : public Napi::ObjectWrap { + QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -21,7 +22,6 @@ class QPlainTextEditWrap : public Napi::ObjectWrap { static Napi::FunctionReference constructor; // wrapped methods - QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION Napi::Value setPlainText(const Napi::CallbackInfo &info); Napi::Value setPlaceholderText(const Napi::CallbackInfo &info); Napi::Value toPlainText(const Napi::CallbackInfo &info); diff --git a/src/cpp/include/nodegui/QtWidgets/QProgressBar/qprogressbar_wrap.h b/src/cpp/include/nodegui/QtWidgets/QProgressBar/qprogressbar_wrap.h index 497d4ce7c..af3e30177 100644 --- a/src/cpp/include/nodegui/QtWidgets/QProgressBar/qprogressbar_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QProgressBar/qprogressbar_wrap.h @@ -8,6 +8,7 @@ #include "nprogressbar.hpp" class QProgressBarWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -24,6 +25,4 @@ class QProgressBarWrap : public Napi::ObjectWrap { Napi::Value setMinimum(const Napi::CallbackInfo& info); Napi::Value setOrientation(const Napi::CallbackInfo& info); Napi::Value value(const Napi::CallbackInfo& info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h b/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h index 55f8636e3..d92215f6f 100644 --- a/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h @@ -9,8 +9,10 @@ #include "QtWidgets/QWidget/qwidget_macro.h" #include "npushbutton.hpp" class QPushButtonWrap : public Napi::ObjectWrap { + QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION private: QPointer instance; + bool disableDeletion; public: static Napi::Object init(Napi::Env env, Napi::Object exports); @@ -21,6 +23,4 @@ class QPushButtonWrap : public Napi::ObjectWrap { static Napi::FunctionReference constructor; // wrapped methods Napi::Value setFlat(const Napi::CallbackInfo &info); - - QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QRadioButton/qradiobutton_wrap.h b/src/cpp/include/nodegui/QtWidgets/QRadioButton/qradiobutton_wrap.h index 88281a3d0..9dafa674f 100644 --- a/src/cpp/include/nodegui/QtWidgets/QRadioButton/qradiobutton_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QRadioButton/qradiobutton_wrap.h @@ -9,8 +9,11 @@ #include "nradiobutton.hpp" class QRadioButtonWrap : public Napi::ObjectWrap { + QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION + private: QPointer instance; + bool disableDeletion; public: static Napi::Object init(Napi::Env env, Napi::Object exports); @@ -20,6 +23,4 @@ class QRadioButtonWrap : public Napi::ObjectWrap { // class constructor static Napi::FunctionReference constructor; // wrapped methods - - QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QScrollArea/qscrollarea_wrap.h b/src/cpp/include/nodegui/QtWidgets/QScrollArea/qscrollarea_wrap.h index 25079450f..762ae1a4c 100644 --- a/src/cpp/include/nodegui/QtWidgets/QScrollArea/qscrollarea_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QScrollArea/qscrollarea_wrap.h @@ -8,6 +8,7 @@ #include "nscrollarea.hpp" class QScrollAreaWrap : public Napi::ObjectWrap { + QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION private: QPointer instance; YGNodeRef scrollNode; @@ -24,6 +25,4 @@ class QScrollAreaWrap : public Napi::ObjectWrap { Napi::Value takeWidget(const Napi::CallbackInfo &info); Napi::Value setWidgetResizable(const Napi::CallbackInfo &info); Napi::Value widgetResizable(const Napi::CallbackInfo &info); - - QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QShortcut/qshortcut_wrap.h b/src/cpp/include/nodegui/QtWidgets/QShortcut/qshortcut_wrap.h index c0d8140ab..4b75a211c 100644 --- a/src/cpp/include/nodegui/QtWidgets/QShortcut/qshortcut_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QShortcut/qshortcut_wrap.h @@ -8,6 +8,7 @@ #include "nshortcut.hpp" class QShortcutWrap : public Napi::ObjectWrap { + QOBJECT_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -23,6 +24,4 @@ class QShortcutWrap : public Napi::ObjectWrap { Napi::Value setAutoRepeat(const Napi::CallbackInfo& info); Napi::Value setKey(const Napi::CallbackInfo& info); Napi::Value setContext(const Napi::CallbackInfo& info); - - QOBJECT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QSpinBox/qspinbox_wrap.h b/src/cpp/include/nodegui/QtWidgets/QSpinBox/qspinbox_wrap.h index ff4af03f2..d50c21fef 100644 --- a/src/cpp/include/nodegui/QtWidgets/QSpinBox/qspinbox_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QSpinBox/qspinbox_wrap.h @@ -9,6 +9,7 @@ #include "nspinbox.hpp" class QSpinBoxWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -29,6 +30,4 @@ class QSpinBoxWrap : public Napi::ObjectWrap { Napi::Value maximum(const Napi::CallbackInfo &info); Napi::Value minimum(const Napi::CallbackInfo &info); Napi::Value value(const Napi::CallbackInfo &info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QStackedWidget/qstackedwidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QStackedWidget/qstackedwidget_wrap.h index b7e20bbb9..30e12eebd 100644 --- a/src/cpp/include/nodegui/QtWidgets/QStackedWidget/qstackedwidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QStackedWidget/qstackedwidget_wrap.h @@ -9,6 +9,7 @@ #include "QtWidgets/QWidget/qwidget_macro.h" class QStackedWidgetWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -25,6 +26,4 @@ class QStackedWidgetWrap : public Napi::ObjectWrap { Napi::Value setCurrentIndex(const Napi::CallbackInfo &info); Napi::Value currentIndex(const Napi::CallbackInfo &info); Napi::Value setCurrentWidget(const Napi::CallbackInfo &info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h b/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h index 05ada8475..67af3ca85 100644 --- a/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h @@ -7,6 +7,7 @@ #include "QtCore/QObject/qobject_macro.h" #include "nsystemtrayicon.hpp" class QSystemTrayIconWrap : public Napi::ObjectWrap { + QOBJECT_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -25,6 +26,4 @@ class QSystemTrayIconWrap : public Napi::ObjectWrap { Napi::Value setToolTip(const Napi::CallbackInfo& info); Napi::Value setContextMenu(const Napi::CallbackInfo& info); Napi::Value showMessage(const Napi::CallbackInfo& info); - - QOBJECT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h index a7b39266e..ca42e8060 100644 --- a/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h @@ -9,6 +9,7 @@ #include "QtWidgets/QWidget/qwidget_macro.h" class QTabWidgetWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -26,6 +27,4 @@ class QTabWidgetWrap : public Napi::ObjectWrap { Napi::Value currentIndex(const Napi::CallbackInfo &info); Napi::Value removeTab(const Napi::CallbackInfo &info); Napi::Value setTabsClosable(const Napi::CallbackInfo &info); - - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QTableWidget/qtablewidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTableWidget/qtablewidget_wrap.h index 6eb28d17c..fd50636da 100644 --- a/src/cpp/include/nodegui/QtWidgets/QTableWidget/qtablewidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTableWidget/qtablewidget_wrap.h @@ -9,6 +9,7 @@ #include "QtWidgets/QTableWidget/ntablewidget.hpp" class QTableWidgetWrap : public Napi::ObjectWrap { + QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -54,6 +55,4 @@ class QTableWidgetWrap : public Napi::ObjectWrap { Napi::Value setRowHeight(const Napi::CallbackInfo& info); Napi::Value setSortingEnabled(const Napi::CallbackInfo& info); Napi::Value isSortingEnabled(const Napi::CallbackInfo& info); - - QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.h index 755291e72..79873d12f 100644 --- a/src/cpp/include/nodegui/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.h @@ -8,6 +8,7 @@ #include "core/Component/component_wrap.h" class QTableWidgetItemWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: QTableWidgetItem* instance; @@ -25,6 +26,4 @@ class QTableWidgetItemWrap : public Napi::ObjectWrap { Napi::Value textAlignment(const Napi::CallbackInfo& info); Napi::Value text(const Napi::CallbackInfo& info); Napi::Value toolTip(const Napi::CallbackInfo& info); - - COMPONENT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QToolButton/qtoolbutton_wrap.h b/src/cpp/include/nodegui/QtWidgets/QToolButton/qtoolbutton_wrap.h index 0c79ece4e..64a4c8908 100644 --- a/src/cpp/include/nodegui/QtWidgets/QToolButton/qtoolbutton_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QToolButton/qtoolbutton_wrap.h @@ -10,8 +10,10 @@ #include "ntoolbutton.hpp" class QToolButtonWrap : public Napi::ObjectWrap { + QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION private: QPointer instance; + bool disableDeletion; public: static Napi::Object init(Napi::Env env, Napi::Object exports); @@ -32,6 +34,4 @@ class QToolButtonWrap : public Napi::ObjectWrap { Napi::Value setMenu(const Napi::CallbackInfo &info); Napi::Value setDefaultAction(const Napi::CallbackInfo &info); Napi::Value showMenu(const Napi::CallbackInfo &info); - - QABSTRACTBUTTON_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QTreeWidget/qtreewidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTreeWidget/qtreewidget_wrap.h index cc5bab715..9adae2879 100644 --- a/src/cpp/include/nodegui/QtWidgets/QTreeWidget/qtreewidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTreeWidget/qtreewidget_wrap.h @@ -8,6 +8,7 @@ #include "ntreewidget.hpp" class QTreeWidgetWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -31,5 +32,4 @@ class QTreeWidgetWrap : public Napi::ObjectWrap { // Napi::Value setVerticalScrollBarPolicy(const Napi::CallbackInfo& info); // Napi::Value takeTopLevelItem(const Napi::CallbackInfo& info); // Napi::Value findItems(const Napi::CallbackInfo& info); - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.h index 1dbed6b1a..838c17e50 100644 --- a/src/cpp/include/nodegui/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.h @@ -8,6 +8,7 @@ #include "core/Component/component_wrap.h" class QTreeWidgetItemWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION private: QTreeWidgetItem *instance; bool disableDeletion; @@ -32,5 +33,4 @@ class QTreeWidgetItemWrap : public Napi::ObjectWrap { Napi::Value text(const Napi::CallbackInfo &info); Napi::Value setSelected(const Napi::CallbackInfo &info); Napi::Value setExpanded(const Napi::CallbackInfo &info); - COMPONENT_WRAPPED_METHODS_DECLARATION }; \ No newline at end of file diff --git a/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h index 2025b803d..a4c16097b 100644 --- a/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h +++ b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h @@ -17,8 +17,8 @@ #ifndef QWIDGET_WRAPPED_METHODS_DECLARATION #define QWIDGET_WRAPPED_METHODS_DECLARATION \ \ - YOGAWIDGET_WRAPPED_METHODS_DECLARATION \ QOBJECT_WRAPPED_METHODS_DECLARATION \ + YOGAWIDGET_WRAPPED_METHODS_DECLARATION \ \ Napi::Value show(const Napi::CallbackInfo& info) { \ Napi::Env env = info.Env(); \ diff --git a/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_wrap.h index 9bfcb110b..ec4aa90ae 100644 --- a/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_wrap.h @@ -8,6 +8,7 @@ #include "nwidget.hpp" class QWidgetWrap : public Napi::ObjectWrap { + QWIDGET_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -19,5 +20,4 @@ class QWidgetWrap : public Napi::ObjectWrap { // class constructor static Napi::FunctionReference constructor; // wrapped methods - QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/include/nodegui/core/Component/component_macro.h b/src/cpp/include/nodegui/core/Component/component_macro.h index b57edc1d2..578c7f3cb 100644 --- a/src/cpp/include/nodegui/core/Component/component_macro.h +++ b/src/cpp/include/nodegui/core/Component/component_macro.h @@ -2,8 +2,8 @@ #pragma once #ifndef COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE -#define COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE \ - \ +#define COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(ComponentWrapName) \ + \ InstanceValue("type", Napi::String::New(env, "native")), #endif diff --git a/src/cpp/include/nodegui/core/Events/eventwidget_macro.h b/src/cpp/include/nodegui/core/Events/eventwidget_macro.h index 5a5e5f6b6..2c426bc3f 100644 --- a/src/cpp/include/nodegui/core/Events/eventwidget_macro.h +++ b/src/cpp/include/nodegui/core/Events/eventwidget_macro.h @@ -40,7 +40,7 @@ #ifndef EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE #define EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \ - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE \ + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \ InstanceMethod("initNodeEventEmitter", \ &WidgetWrapName::initNodeEventEmitter), \ InstanceMethod("subscribeToQtEvent", \ diff --git a/src/cpp/include/nodegui/core/FlexLayout/flexlayout_wrap.h b/src/cpp/include/nodegui/core/FlexLayout/flexlayout_wrap.h index 19626485f..d6fdefefc 100644 --- a/src/cpp/include/nodegui/core/FlexLayout/flexlayout_wrap.h +++ b/src/cpp/include/nodegui/core/FlexLayout/flexlayout_wrap.h @@ -8,6 +8,7 @@ #include "flexlayout.hpp" class FlexLayoutWrap : public Napi::ObjectWrap { + QLAYOUT_WRAPPED_METHODS_DECLARATION private: QPointer instance; @@ -23,5 +24,4 @@ class FlexLayoutWrap : public Napi::ObjectWrap { Napi::Value insertChildBefore(const Napi::CallbackInfo& info); Napi::Value removeWidget(const Napi::CallbackInfo& info); Napi::Value setFlexNode(const Napi::CallbackInfo& info); - QLAYOUT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/lib/Extras/Utils/nutils.cpp b/src/cpp/lib/Extras/Utils/nutils.cpp index f9efd17b6..d3750d232 100644 --- a/src/cpp/lib/Extras/Utils/nutils.cpp +++ b/src/cpp/lib/Extras/Utils/nutils.cpp @@ -94,4 +94,33 @@ void extrautils::initAppSettings() { f.setFamily("Sans-Serif"); QApplication::setFont(f); } -} \ No newline at end of file +} + +Napi::FunctionReference NUtilsWrap::constructor; + +Napi::Object NUtilsWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "NUtils"; + Napi::Function func = + DefineClass(env, CLASSNAME, + { + StaticMethod("isNapiExternal", + &StaticNUtilsWrapMethods::isNapiExternal), + }); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +NUtilsWrap::NUtilsWrap(const Napi::CallbackInfo& info) + : Napi::ObjectWrap(info) {} + +Napi::Value StaticNUtilsWrapMethods::isNapiExternal( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + if (info.Length() > 0 && info[0].IsExternal()) { + return Napi::Boolean::New(env, true); + } + return Napi::Boolean::New(env, false); +} diff --git a/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp b/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp index aee40e2fd..7ec55e804 100644 --- a/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp +++ b/src/cpp/lib/QtCore/QModelIndex/qmodelindex_wrap.cpp @@ -2,6 +2,7 @@ #include "Extras/Utils/nutils.h" #include "QtCore/QVariant/qvariant_wrap.h" +#include "core/Component/component_wrap.h" Napi::FunctionReference QModelIndexWrap::constructor; @@ -21,7 +22,7 @@ Napi::Object QModelIndexWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("siblingAtRow", &QModelIndexWrap::siblingAtRow), StaticMethod("fromQVariant", &StaticQModelIndexWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QModelIndexWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp b/src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp index 668ba1f6b..0d331ced7 100644 --- a/src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp +++ b/src/cpp/lib/QtCore/QPoint/qpoint_wrap.cpp @@ -15,7 +15,7 @@ Napi::Object QPointWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("setY", &QPointWrap::setY), InstanceMethod("y", &QPointWrap::y), StaticMethod("fromQVariant", &StaticQPointWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QPointWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtCore/QRect/qrect_wrap.cpp b/src/cpp/lib/QtCore/QRect/qrect_wrap.cpp index 9d334529e..1c7b7defb 100644 --- a/src/cpp/lib/QtCore/QRect/qrect_wrap.cpp +++ b/src/cpp/lib/QtCore/QRect/qrect_wrap.cpp @@ -19,7 +19,7 @@ Napi::Object QRectWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("left", &QRectWrap::left), InstanceMethod("top", &QRectWrap::top), StaticMethod("fromQVariant", &StaticQRectWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QRectWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtCore/QSize/qsize_wrap.cpp b/src/cpp/lib/QtCore/QSize/qsize_wrap.cpp index 5953f0ece..57b363e3a 100644 --- a/src/cpp/lib/QtCore/QSize/qsize_wrap.cpp +++ b/src/cpp/lib/QtCore/QSize/qsize_wrap.cpp @@ -15,7 +15,7 @@ Napi::Object QSizeWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("height", &QSizeWrap::height), InstanceMethod("width", &QSizeWrap::width), StaticMethod("fromQVariant", &StaticQSizeWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QSizeWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp b/src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp index dfe807274..d8c86a47e 100644 --- a/src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp +++ b/src/cpp/lib/QtCore/QUrl/qurl_wrap.cpp @@ -13,7 +13,7 @@ Napi::Object QUrlWrap::init(Napi::Env env, Napi::Object exports) { {InstanceMethod("setUrl", &QUrlWrap::setUrl), InstanceMethod("toString", &QUrlWrap::toString), StaticMethod("fromQVariant", &StaticQUrlWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QUrlWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp b/src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp index b34e68c76..f21311270 100644 --- a/src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp +++ b/src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp @@ -15,7 +15,7 @@ Napi::Object QVariantWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("toBool", &QVariantWrap::toBool), StaticMethod("converToQVariant", &StaticQVariantWrapMethods::converToQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QVariantWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp index 026f90f08..6be4cc239 100644 --- a/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp +++ b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp @@ -24,7 +24,7 @@ Napi::Object QApplicationWrap::init(Napi::Env env, Napi::Object exports) { StaticMethod("instance", &StaticQApplicationWrapMethods::instance), StaticMethod("clipboard", &StaticQApplicationWrapMethods::clipboard), StaticMethod("style", &StaticQApplicationWrapMethods::style), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QApplicationWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp b/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp index 324bf4b39..6cecba208 100644 --- a/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp +++ b/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp @@ -12,7 +12,7 @@ Napi::Object QClipboardWrap::init(Napi::Env env, Napi::Object exports) { {InstanceMethod("clear", &QClipboardWrap::clear), InstanceMethod("setText", &QClipboardWrap::setText), InstanceMethod("text", &QClipboardWrap::text), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QClipboardWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QColor/qcolor_wrap.cpp b/src/cpp/lib/QtGui/QColor/qcolor_wrap.cpp index 271d8da7c..cbdabb799 100644 --- a/src/cpp/lib/QtGui/QColor/qcolor_wrap.cpp +++ b/src/cpp/lib/QtGui/QColor/qcolor_wrap.cpp @@ -19,7 +19,7 @@ Napi::Object QColorWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("setAlpha", &QColorWrap::setAlpha), InstanceMethod("alpha", &QColorWrap::alpha), StaticMethod("fromQVariant", &StaticQColorWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QColorWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp b/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp index 3e096ae48..39a9e47d4 100644 --- a/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp +++ b/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp @@ -12,7 +12,7 @@ Napi::Object QCursorWrap::init(Napi::Env env, Napi::Object exports) { DefineClass(env, CLASSNAME, {InstanceMethod("pos", &QCursorWrap::pos), InstanceMethod("setPos", &QCursorWrap::setPos), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QCursorWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp b/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp index 7329ca4e4..fd9951e3b 100644 --- a/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp +++ b/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp @@ -16,7 +16,7 @@ Napi::Object QKeyEventWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("modifiers", &QKeyEventWrap::modifiers), InstanceMethod("count", &QKeyEventWrap::count), InstanceMethod("isAutoRepeat", &QKeyEventWrap::isAutoRepeat), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QKeyEventWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.cpp b/src/cpp/lib/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.cpp index 35f9f4e36..b0ea8b8f5 100644 --- a/src/cpp/lib/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.cpp +++ b/src/cpp/lib/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.cpp @@ -17,7 +17,7 @@ Napi::Object QMouseEventWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("globalX", &QMouseEventWrap::globalX), InstanceMethod("globalY", &QMouseEventWrap::globalY), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QMouseEventWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QFont/qfont_wrap.cpp b/src/cpp/lib/QtGui/QFont/qfont_wrap.cpp index 74537fec4..630824f91 100644 --- a/src/cpp/lib/QtGui/QFont/qfont_wrap.cpp +++ b/src/cpp/lib/QtGui/QFont/qfont_wrap.cpp @@ -2,6 +2,7 @@ #include "Extras/Utils/nutils.h" #include "QtCore/QVariant/qvariant_wrap.h" +#include "core/Component/component_wrap.h" Napi::FunctionReference QFontWrap::constructor; @@ -24,7 +25,7 @@ Napi::Object QFontWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("italic", &QFontWrap::italic), InstanceMethod("toString", &QFontWrap::toString), StaticMethod("fromQVariant", &StaticQFontWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QFontWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp b/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp index 246f74b04..169be295a 100644 --- a/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp +++ b/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp @@ -16,7 +16,7 @@ Napi::Object QFontDatabaseWrap::init(Napi::Env env, Napi::Object exports) { &StaticQFontDatabaseWrapMethods::addApplicationFont), StaticMethod("removeApplicationFont", &StaticQFontDatabaseWrapMethods::removeApplicationFont), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QFontDatabaseWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp b/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp index a317009fc..c5cdde1d5 100644 --- a/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp +++ b/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp @@ -16,7 +16,7 @@ Napi::Object QIconWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("setIsMask", &QIconWrap::setIsMask), InstanceMethod("cacheKey", &QIconWrap::cacheKey), StaticMethod("fromQVariant", &StaticQIconWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QIconWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp b/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp index 2d5f73c37..afcdf9b2b 100644 --- a/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp +++ b/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp @@ -11,7 +11,7 @@ Napi::Object QKeySequenceWrap::init(Napi::Env env, Napi::Object exports) { Napi::Function func = DefineClass(env, CLASSNAME, {InstanceMethod("count", &QKeySequenceWrap::count), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QKeySequenceWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp b/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp index 57dcdf7f5..37798ef52 100644 --- a/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp +++ b/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp @@ -17,7 +17,7 @@ Napi::Object QPixmapWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("height", &QPixmapWrap::height), InstanceMethod("width", &QPixmapWrap::width), StaticMethod("fromQVariant", &StaticQPixmapWrapMethods::fromQVariant), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QPixmapWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp b/src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp index b95a53fec..4b09d1b1e 100644 --- a/src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp +++ b/src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp @@ -10,7 +10,7 @@ Napi::Object QStyleWrap::init(Napi::Env env, Napi::Object exports) { Napi::Function func = DefineClass(env, CLASSNAME, {InstanceMethod("pixelMetric", &QStyleWrap::pixelMetric), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QStyleWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp b/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp index 266fbf1b3..8170281a0 100644 --- a/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp @@ -27,23 +27,35 @@ QCheckBoxWrap::QCheckBoxWrap(const Napi::CallbackInfo& info) Napi::Env env = info.Env(); Napi::HandleScope scope(env); - if (info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = - Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NCheckBox(parentWidgetWrap->getInternalInstance()); - } else if (info.Length() == 0) { - this->instance = new NCheckBox(); + if (info.Length() > 0 && info[0].IsExternal()) { + // --- if external --- + this->instance = info[0].As>().Data(); + if (info.Length() == 2) { + this->disableDeletion = info[1].As().Value(); + } } else { - Napi::TypeError::New(env, "Wrong number of arguments") - .ThrowAsJavaScriptException(); + if (info.Length() == 1) { + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NCheckBox(parentWidgetWrap->getInternalInstance()); + } else if (info.Length() == 0) { + this->instance = new NCheckBox(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } } this->rawData = extrautils::configureQWidget( this->getInternalInstance(), this->getInternalInstance()->getFlexNode(), true); } -QCheckBoxWrap::~QCheckBoxWrap() { extrautils::safeDelete(this->instance); } +QCheckBoxWrap::~QCheckBoxWrap() { + if (!this->disableDeletion) { + extrautils::safeDelete(this->instance); + } +} Napi::Value QCheckBoxWrap::isChecked(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); diff --git a/src/cpp/lib/QtWidgets/QDialog/qdialog_wrap.cpp b/src/cpp/lib/QtWidgets/QDialog/qdialog_wrap.cpp new file mode 100644 index 000000000..93fad21b4 --- /dev/null +++ b/src/cpp/lib/QtWidgets/QDialog/qdialog_wrap.cpp @@ -0,0 +1,44 @@ +#include "QtWidgets/QDialog/qdialog_wrap.h" + +#include "Extras/Utils/nutils.h" + +Napi::FunctionReference QDialogWrap::constructor; + +Napi::Object QDialogWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "QDialog"; + Napi::Function func = DefineClass( + env, CLASSNAME, {QDIALOG_WRAPPED_METHODS_EXPORT_DEFINE(QDialogWrap)}); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +NDialog *QDialogWrap::getInternalInstance() { return this->instance; } + +QDialogWrap::~QDialogWrap() { extrautils::safeDelete(this->instance); } + +QDialogWrap::QDialogWrap(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 = + new NDialog(info[0].As>().Data()); + } else { + Napi::Object parentObject = info[0].As(); + QDialogWrap *parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NDialog(parentWidgetWrap->getInternalInstance()); + } + } else if (info.Length() == 0) { + this->instance = new NDialog(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } + this->rawData = extrautils::configureQWidget( + this->getInternalInstance(), this->getInternalInstance()->getFlexNode(), + false); +} diff --git a/src/cpp/lib/QtWidgets/QFileDialog/qfiledialog_wrap.cpp b/src/cpp/lib/QtWidgets/QFileDialog/qfiledialog_wrap.cpp index 38dc28909..ad69f8190 100644 --- a/src/cpp/lib/QtWidgets/QFileDialog/qfiledialog_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QFileDialog/qfiledialog_wrap.cpp @@ -12,14 +12,13 @@ Napi::Object QFileDialogWrap::init(Napi::Env env, Napi::Object exports) { char CLASSNAME[] = "QFileDialog"; Napi::Function func = DefineClass( env, CLASSNAME, - {InstanceMethod("open", &QFileDialogWrap::open), - InstanceMethod("supportedSchemes", &QFileDialogWrap::supportedSchemes), + {InstanceMethod("supportedSchemes", &QFileDialogWrap::supportedSchemes), InstanceMethod("setSupportedSchemes", &QFileDialogWrap::setSupportedSchemes), InstanceMethod("labelText", &QFileDialogWrap::labelText), InstanceMethod("setLabelText", &QFileDialogWrap::setLabelText), InstanceMethod("setOption", &QFileDialogWrap::setOption), - QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QFileDialogWrap)}); + QDIALOG_WRAPPED_METHODS_EXPORT_DEFINE(QFileDialogWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; @@ -55,13 +54,6 @@ QFileDialogWrap::QFileDialogWrap(const Napi::CallbackInfo& info) this->getInternalInstance(), this->getInternalInstance()->getFlexNode(), false); } -Napi::Value QFileDialogWrap::open(const Napi::CallbackInfo& info) { - Napi::Env env = info.Env(); - Napi::HandleScope scope(env); - - this->instance->open(); - return env.Null(); -} Napi::Value QFileDialogWrap::supportedSchemes(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); diff --git a/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp b/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp index 65717fab3..6038e883f 100644 --- a/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QListWidgetItem/qlistwidgetitem_wrap.cpp @@ -36,7 +36,7 @@ Napi::Object QListWidgetItemWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("toolTip", &QListWidgetItemWrap::toolTip), InstanceMethod("setWhatsThis", &QListWidgetItemWrap::setWhatsThis), InstanceMethod("whatsThis", &QListWidgetItemWrap::whatsThis), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QListWidgetItemWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtWidgets/QMessageBox/qmessagebox_wrap.cpp b/src/cpp/lib/QtWidgets/QMessageBox/qmessagebox_wrap.cpp new file mode 100644 index 000000000..36068c61c --- /dev/null +++ b/src/cpp/lib/QtWidgets/QMessageBox/qmessagebox_wrap.cpp @@ -0,0 +1,121 @@ +#include "QtWidgets/QMessageBox/qmessagebox_wrap.h" + +#include +#include + +#include "Extras/Utils/nutils.h" +#include "QtCore/QObject/qobject_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" + +Napi::FunctionReference QMessageBoxWrap::constructor; + +Napi::Object QMessageBoxWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "QMessageBox"; + Napi::Function func = DefineClass( + env, CLASSNAME, + {InstanceMethod("setDefaultButton", &QMessageBoxWrap::setDefaultButton), + InstanceMethod("addButton", &QMessageBoxWrap::addButton), + InstanceMethod("accept", &QMessageBoxWrap::accept), + InstanceMethod("done", &QMessageBoxWrap::done), + StaticMethod("about", &StaticQMessageBoxWrapMethods::about), + StaticMethod("aboutQt", &StaticQMessageBoxWrapMethods::aboutQt), + QDIALOG_WRAPPED_METHODS_EXPORT_DEFINE(QMessageBoxWrap)}); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +NMessageBox* QMessageBoxWrap::getInternalInstance() { return this->instance; } +QMessageBoxWrap::~QMessageBoxWrap() { extrautils::safeDelete(this->instance); } + +QMessageBoxWrap::QMessageBoxWrap(const Napi::CallbackInfo& info) + : Napi::ObjectWrap(info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + if (info.Length() == 1) { + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NMessageBox(parentWidgetWrap->getInternalInstance()); + } else if (info.Length() == 0) { + this->instance = new NMessageBox(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } + this->instance->setStandardButtons(QMessageBox::NoButton); + this->rawData = extrautils::configureQWidget( + this->getInternalInstance(), this->getInternalInstance()->getFlexNode(), + false); +} + +Napi::Value QMessageBoxWrap::setDefaultButton(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Object buttonObject = info[0].As(); + QPushButtonWrap* buttonWrap = + Napi::ObjectWrap::Unwrap(buttonObject); + this->instance->setDefaultButton(buttonWrap->getInternalInstance()); + return env.Null(); +} +Napi::Value QMessageBoxWrap::addButton(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Object buttonObject = info[0].As(); + QObjectWrap* qobjWrap = Napi::ObjectWrap::Unwrap(buttonObject); + QAbstractButton* btn = + qobject_cast(qobjWrap->getInternalInstance()); + + int role = info[1].As().Int32Value(); + this->instance->addButton(btn, QMessageBox::ButtonRole(role)); + return env.Null(); +} +Napi::Value QMessageBoxWrap::accept(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + this->instance->accept(); + return env.Null(); +} +Napi::Value QMessageBoxWrap::done(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number r = info[0].As(); + this->instance->done(r.Int32Value()); + return env.Null(); +} + +Napi::Value StaticQMessageBoxWrapMethods::about( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + Napi::String napiTitle = info[1].As(); + std::string title = napiTitle.Utf8Value(); + Napi::String napiText = info[2].As(); + std::string text = napiText.Utf8Value(); + QMessageBox::about(parentWidgetWrap->getInternalInstance(), + QString::fromUtf8(title.c_str()), + QString::fromUtf8(text.c_str())); + + return env.Null(); +} + +Napi::Value StaticQMessageBoxWrapMethods::aboutQt( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + Napi::String napiTitle = info[1].As(); + std::string title = napiTitle.Utf8Value(); + QMessageBox::aboutQt(parentWidgetWrap->getInternalInstance(), + QString::fromUtf8(title.c_str())); + + return env.Null(); +} \ No newline at end of file diff --git a/src/cpp/lib/QtWidgets/QPainter/qpainter_wrap.cpp b/src/cpp/lib/QtWidgets/QPainter/qpainter_wrap.cpp index 61d8071ed..1003f9a2f 100644 --- a/src/cpp/lib/QtWidgets/QPainter/qpainter_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QPainter/qpainter_wrap.cpp @@ -26,7 +26,7 @@ Napi::Object QPainterWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("drawConvexPolygon", &QPainterWrap::drawConvexPolygon), InstanceMethod("save", &QPainterWrap::save), InstanceMethod("restore", &QPainterWrap::restore), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QPainterWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp b/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp index 8af6ac07b..3bfd1524e 100644 --- a/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp @@ -23,24 +23,36 @@ QPushButtonWrap::QPushButtonWrap(const Napi::CallbackInfo& info) : Napi::ObjectWrap(info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); - - if (info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = - Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NPushButton(parentWidgetWrap->getInternalInstance()); - } else if (info.Length() == 0) { - this->instance = new NPushButton(); + if (info.Length() > 0 && info[0].IsExternal()) { + // --- if external --- + this->instance = info[0].As>().Data(); + if (info.Length() == 2) { + this->disableDeletion = info[1].As().Value(); + } } else { - Napi::TypeError::New(env, "Wrong number of arguments") - .ThrowAsJavaScriptException(); + if (info.Length() == 1) { + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NPushButton(parentWidgetWrap->getInternalInstance()); + } else if (info.Length() == 0) { + this->instance = new NPushButton(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } } + this->rawData = extrautils::configureQWidget( this->getInternalInstance(), this->getInternalInstance()->getFlexNode(), true); } -QPushButtonWrap::~QPushButtonWrap() { extrautils::safeDelete(this->instance); } +QPushButtonWrap::~QPushButtonWrap() { + if (!this->disableDeletion) { + extrautils::safeDelete(this->instance); + } +} Napi::Value QPushButtonWrap::setFlat(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); diff --git a/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp b/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp index 6facfd98c..502cf44c8 100644 --- a/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp @@ -25,17 +25,25 @@ QRadioButtonWrap::QRadioButtonWrap(const Napi::CallbackInfo& info) : Napi::ObjectWrap(info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); - - if (info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = - Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NRadioButton(parentWidgetWrap->getInternalInstance()); - } else if (info.Length() == 0) { - this->instance = new NRadioButton(); + if (info.Length() > 0 && info[0].IsExternal()) { + // --- if external --- + this->instance = info[0].As>().Data(); + if (info.Length() == 2) { + this->disableDeletion = info[1].As().Value(); + } } else { - Napi::TypeError::New(env, "Wrong number of arguments") - .ThrowAsJavaScriptException(); + if (info.Length() == 1) { + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + this->instance = + new NRadioButton(parentWidgetWrap->getInternalInstance()); + } else if (info.Length() == 0) { + this->instance = new NRadioButton(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } } this->rawData = extrautils::configureQWidget( this->getInternalInstance(), this->getInternalInstance()->getFlexNode(), @@ -43,5 +51,7 @@ QRadioButtonWrap::QRadioButtonWrap(const Napi::CallbackInfo& info) } QRadioButtonWrap::~QRadioButtonWrap() { - extrautils::safeDelete(this->instance); + if (!this->disableDeletion) { + extrautils::safeDelete(this->instance); + } } diff --git a/src/cpp/lib/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.cpp b/src/cpp/lib/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.cpp index a122fe136..bb5d875fd 100644 --- a/src/cpp/lib/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.cpp @@ -18,7 +18,7 @@ Napi::Object QTableWidgetItemWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("text", &QTableWidgetItemWrap::text), InstanceMethod("toolTip", &QTableWidgetItemWrap::toolTip), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QTableWidgetItemWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp b/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp index 0bef5805e..782103ca7 100644 --- a/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp @@ -37,23 +37,35 @@ QToolButtonWrap::QToolButtonWrap(const Napi::CallbackInfo &info) Napi::Env env = info.Env(); Napi::HandleScope scope(env); - if (info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap *parentWidgetWrap = - Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NToolButton(parentWidgetWrap->getInternalInstance()); - } else if (info.Length() == 0) { - this->instance = new NToolButton(); + if (info.Length() > 0 && info[0].IsExternal()) { + // --- if external --- + this->instance = info[0].As>().Data(); + if (info.Length() == 2) { + this->disableDeletion = info[1].As().Value(); + } } else { - Napi::TypeError::New(env, "Wrong number of arguments") - .ThrowAsJavaScriptException(); + if (info.Length() == 1) { + Napi::Object parentObject = info[0].As(); + QWidgetWrap *parentWidgetWrap = + Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NToolButton(parentWidgetWrap->getInternalInstance()); + } else if (info.Length() == 0) { + this->instance = new NToolButton(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } } this->rawData = extrautils::configureQWidget( this->getInternalInstance(), this->getInternalInstance()->getFlexNode(), true); } -QToolButtonWrap::~QToolButtonWrap() { extrautils::safeDelete(this->instance); } +QToolButtonWrap::~QToolButtonWrap() { + if (!this->disableDeletion) { + extrautils::safeDelete(this->instance); + } +} Napi::Value QToolButtonWrap::setArrowType(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); diff --git a/src/cpp/lib/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.cpp b/src/cpp/lib/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.cpp index 3a943fe1c..5726f018c 100644 --- a/src/cpp/lib/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QTreeWidgetItem/qtreewidgetitem_wrap.cpp @@ -21,7 +21,7 @@ Napi::Object QTreeWidgetItemWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("childCount", &QTreeWidgetItemWrap::childCount), InstanceMethod("setSelected", &QTreeWidgetItemWrap::setSelected), InstanceMethod("setExpanded", &QTreeWidgetItemWrap::setExpanded), - COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QTreeWidgetItemWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); return exports; diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 938bf8dc8..eb95f584c 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -1,5 +1,6 @@ #include +#include "Extras/Utils/nutils.h" #include "QtCore/QModelIndex/qmodelindex_wrap.h" #include "QtCore/QObject/qobject_wrap.h" #include "QtCore/QPoint/qpoint_wrap.h" @@ -25,6 +26,7 @@ #include "QtWidgets/QCheckBox/qcheckbox_wrap.h" #include "QtWidgets/QComboBox/qcombobox_wrap.h" #include "QtWidgets/QDial/qdial_wrap.h" +#include "QtWidgets/QDialog/qdialog_wrap.h" #include "QtWidgets/QFileDialog/qfiledialog_wrap.h" #include "QtWidgets/QGridLayout/qgridlayout_wrap.h" #include "QtWidgets/QGroupBox/qgroupbox_wrap.h" @@ -36,6 +38,7 @@ #include "QtWidgets/QMainWindow/qmainwindow_wrap.h" #include "QtWidgets/QMenu/qmenu_wrap.h" #include "QtWidgets/QMenuBar/qmenubar_wrap.h" +#include "QtWidgets/QMessageBox/qmessagebox_wrap.h" #include "QtWidgets/QPainter/qpainter_wrap.h" #include "QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h" #include "QtWidgets/QProgressBar/qprogressbar_wrap.h" @@ -62,6 +65,7 @@ void InitPrivateHelpers(Napi::Env env) { Napi::Object Main(Napi::Env env, Napi::Object exports) { InitPrivateHelpers(env); + NUtilsWrap::init(env, exports); QApplicationWrap::init(env, exports); QModelIndexWrap::init(env, exports); QObjectWrap::init(env, exports); @@ -72,6 +76,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QColorWrap::init(env, exports); QUrlWrap::init(env, exports); QClipboardWrap::init(env, exports); + QDialogWrap::init(env, exports); QWidgetWrap::init(env, exports); QPixmapWrap::init(env, exports); QKeySequenceWrap::init(env, exports); @@ -115,6 +120,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QShortcutWrap::init(env, exports); QMenuWrap::init(env, exports); QMenuBarWrap::init(env, exports); + QMessageBoxWrap::init(env, exports); return exports; } diff --git a/src/demo.ts b/src/demo.ts index 7974eb37b..d9af32687 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -1,87 +1,23 @@ -import { - FlexLayout, - PenStyle, - WidgetEventTypes, - QColor, - QMainWindow, - QPainter, - QPoint, - QWidget, - RenderHint, -} from './index'; +import { QMessageBox } from './index'; +import { QToolButton } from './lib/QtWidgets/QToolButton'; -const win = new QMainWindow(); -const center = new QWidget(); -const layout = new FlexLayout(); -const hourHand = [new QPoint(7, 8), new QPoint(-7, 8), new QPoint(0, -40)]; -const minuteHand = [new QPoint(7, 8), new QPoint(-7, 8), new QPoint(0, -70)]; -const secondHand = [new QPoint(4, 8), new QPoint(-4, 8), new QPoint(0, -70)]; -const hourColor = new QColor(127, 0, 127); -const minuteColor = new QColor(0, 127, 127, 191); -const secondColor = new QColor(0, 0, 0); +const msgBox = new QMessageBox(); +// const msgBoxButton = msgBox.addButton('Another button'); +// console.log(msgBoxButton); +msgBox.setText('hellllooo'); -center.setLayout(layout); -win.setWindowTitle('Analog Clock'); - -const side = Math.min(win.geometry().width(), win.geometry().height()); - -function repaint(): void { - win.repaint(); - setTimeout(repaint, 1000); -} - -setTimeout(repaint, 1000); -win.addEventListener(WidgetEventTypes.Paint, () => { - const time = new Date(); - - const painter = new QPainter(win); - painter.setRenderHint(RenderHint.Antialiasing); - painter.translate(win.geometry().width() / 2, win.geometry().height() / 2); - painter.scale(side / 200.0, side / 200.0); - - painter.setPen(PenStyle.NoPen); - painter.setBrush(hourColor); - - painter.save(); - painter.rotate(30.0 * (time.getHours() + time.getMinutes() / 60.0)); - painter.drawConvexPolygon(hourHand); - painter.restore(); - - painter.setPen(hourColor); - - for (let i = 0; i < 12; ++i) { - painter.drawLine(88, 0, 96, 0); - painter.rotate(30.0); - } - - painter.setPen(PenStyle.NoPen); - painter.setBrush(minuteColor); - - painter.save(); - painter.rotate(6.0 * (time.getMinutes() + time.getSeconds() / 60.0)); - painter.drawConvexPolygon(minuteHand); - painter.restore(); - - painter.setBrush(secondColor); - painter.setPen(PenStyle.NoPen); - - painter.save(); - painter.rotate(360 * (time.getSeconds() / 60.0)); - painter.drawConvexPolygon(secondHand); - painter.restore(); - - painter.setPen(minuteColor); - for (let j = 0; j < 60; ++j) { - if (j % 5 != 0) { - painter.drawLine(92, 0, 96, 0); - } - painter.rotate(6.0); - } - painter.end(); +const btn = new QToolButton(); +btn.setText('yolo'); +msgBox.addButton(btn); +msgBox.addEventListener('buttonClicked', rawButtonPtr => { + console.log(rawButtonPtr); + const btn2 = new QToolButton(rawButtonPtr); + btn2.setText('Helloooo'); + const newMsg = new QMessageBox(); + newMsg.exec(); }); +msgBox.exec(); -win.setCentralWidget(center); -win.resize(400, 400); +(global as any).msg = msgBox; -win.show(); -(global as any).win = win; +setInterval(() => null, 1000); diff --git a/src/index.ts b/src/index.ts index 2d5392492..20fe5ca8e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -51,6 +51,8 @@ export { QScrollArea, QScrollAreaSignals } from './lib/QtWidgets/QScrollArea'; export { QTreeWidget, QTreeWidgetSignals } from './lib/QtWidgets/QTreeWidget'; export { QTreeWidgetItem } from './lib/QtWidgets/QTreeWidgetItem'; export { QPainter, RenderHint } from './lib/QtWidgets/QPainter'; +export { QDialog, QDialogSignals } from './lib/QtWidgets/QDialog'; +export { QMessageBox, StandardButton, Icon, ButtonRole } from './lib/QtWidgets/QMessageBox'; export { QSystemTrayIcon, @@ -76,4 +78,4 @@ export { FlexLayout, FlexLayoutSignals } from './lib/core/FlexLayout'; // Others: export { StyleSheet } from './lib/core/Style/StyleSheet'; export { NativeElement, Component } from './lib/core/Component'; -export { checkIfNativeElement } from './lib/utils/helpers'; +export { checkIfNativeElement, checkIfNapiExternal } from './lib/utils/helpers'; diff --git a/src/lib/QtCore/QObject.ts b/src/lib/QtCore/QObject.ts index 2430fc883..4794aa220 100644 --- a/src/lib/QtCore/QObject.ts +++ b/src/lib/QtCore/QObject.ts @@ -37,7 +37,7 @@ export class QObject extends NodeObject { let parent; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (arg as NodeObject) { + } else if (arg) { parent = arg as NodeObject; native = new addon.QObject(parent.native); } else { diff --git a/src/lib/QtWidgets/QCheckBox.ts b/src/lib/QtWidgets/QCheckBox.ts index 5d21a9238..584b785fe 100644 --- a/src/lib/QtWidgets/QCheckBox.ts +++ b/src/lib/QtWidgets/QCheckBox.ts @@ -1,7 +1,8 @@ import addon from '../utils/addon'; import { NodeWidget } from './QWidget'; -import { NativeElement } from '../core/Component'; +import { NativeElement, NativeRawPointer, Component } from '../core/Component'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; +import { checkIfNativeElement, checkIfNapiExternal } from '../utils/helpers'; export type QCheckBoxSignals = QAbstractButtonSignals; @@ -26,16 +27,24 @@ export class QCheckBox extends QAbstractButton { native: NativeElement; constructor(); constructor(parent: NodeWidget); - constructor(parent?: NodeWidget) { + constructor(rawPointer: NativeRawPointer, disableNativeDeletion?: boolean); + constructor(arg?: NodeWidget | NativeRawPointer | NativeElement, disableNativeDeletion = true) { let native; - if (parent) { - native = new addon.QCheckBox(parent.native); + let parent: Component | undefined; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (checkIfNapiExternal(arg)) { + native = new addon.QCheckBox(arg, disableNativeDeletion); + } else if (arg) { + const parentWidget = arg as NodeWidget; + native = new addon.QCheckBox(parentWidget.native); + parent = parentWidget; } else { native = new addon.QCheckBox(); } super(native); this.native = native; - this.setNodeParent(parent); + parent && this.setNodeParent(parent); } setChecked(check: boolean): void { this.native.setChecked(check); diff --git a/src/lib/QtWidgets/QDialog.ts b/src/lib/QtWidgets/QDialog.ts new file mode 100644 index 000000000..3f6484337 --- /dev/null +++ b/src/lib/QtWidgets/QDialog.ts @@ -0,0 +1,58 @@ +import addon from '../utils/addon'; +import { NativeElement } from '../core/Component'; + +import { checkIfNativeElement } from '../utils/helpers'; +import { NodeWidget, QWidgetSignals } from './QWidget'; +// All Dialogs should extend from NodeDialog +// Implement all native QDialog methods here so that all dialogs get access to those aswell +export abstract class NodeDialog extends NodeWidget { + setResult(i: number): void { + this.native.setResult(i); + } + result(): number { + return this.native.result(); + } + setModal(modal: boolean): void { + this.setProperty('modal', modal); + } + setSizeGripEnabled(enabled: boolean): void { + this.setProperty('sizeGripEnabled', enabled); + } + isSizeGripEnabled(): boolean { + return this.property('sizeGripEnabled').toBool(); + } + exec(): number { + return this.native.exec(); + } + open(): void { + this.native.open(); + } + reject(): void { + this.native.reject(); + } +} + +export interface QDialogSignals extends QWidgetSignals { + accepted: () => void; + finished: (result: number) => void; + rejected: () => void; +} + +export class QDialog extends NodeDialog { + native: NativeElement; + constructor(arg?: NodeDialog | NativeElement) { + let native; + let parent; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg as NodeDialog) { + parent = arg as NodeDialog; + native = new addon.QDialog(parent.native); + } else { + native = new addon.QDialog(); + } + super(native); + this.setNodeParent(parent); + this.native = native; + } +} diff --git a/src/lib/QtWidgets/QFileDialog.ts b/src/lib/QtWidgets/QFileDialog.ts index 5cb20e25d..f8c9142ec 100644 --- a/src/lib/QtWidgets/QFileDialog.ts +++ b/src/lib/QtWidgets/QFileDialog.ts @@ -1,9 +1,10 @@ import addon from '../utils/addon'; -import { NodeWidget, QWidgetSignals } from './QWidget'; +import { NodeWidget } from './QWidget'; import { NativeElement } from '../core/Component'; import { AcceptMode, DialogLabel, FileMode, Option, ViewMode } from '../QtEnums'; +import { NodeDialog, QDialogSignals } from './QDialog'; -export interface QFileDialogSignals extends QWidgetSignals { +export interface QFileDialogSignals extends QDialogSignals { currentChanged: (path: string) => void; currentUrlChanged: (url: string) => void; directoryEntered: (directory: string) => void; @@ -15,7 +16,7 @@ export interface QFileDialogSignals extends QWidgetSignals { urlsSelected: (urls: string[]) => void; } -export class QFileDialog extends NodeWidget { +export class QFileDialog extends NodeDialog { native: NativeElement; constructor(); constructor(parent: NodeWidget, caption?: string, directory?: string, filter?: string); @@ -30,9 +31,6 @@ export class QFileDialog extends NodeWidget { this.native = native; this.setNodeParent(parent); } - open(): void { - this.native.open(); - } supportedSchemes(): string[] { return this.native.supportedSchemes(); } diff --git a/src/lib/QtWidgets/QMessageBox.ts b/src/lib/QtWidgets/QMessageBox.ts new file mode 100644 index 000000000..88b3cd194 --- /dev/null +++ b/src/lib/QtWidgets/QMessageBox.ts @@ -0,0 +1,111 @@ +import addon from '../utils/addon'; +import { NodeWidget } from './QWidget'; +import { NativeElement, NativeRawPointer } from '../core/Component'; +import { NodeDialog, QDialogSignals } from './QDialog'; +import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; +import { QPushButton } from './QPushButton'; + +export interface QMessageBoxSignals extends QDialogSignals { + buttonClicked: (buttonRawPointer: NativeRawPointer<'QAbstractButton*'>) => void; +} + +export enum StandardButton { + Ok = 0x00000400, + Open = 0x00002000, + Save = 0x00000800, + Cancel = 0x00400000, + Close = 0x00200000, + Discard = 0x00800000, + Apply = 0x02000000, + Reset = 0x04000000, + RestoreDefaults = 0x08000000, + Help = 0x01000000, + SaveAll = 0x00001000, + Yes = 0x00004000, + YesToAll = 0x00008000, + No = 0x00010000, + NoToAll = 0x00020000, + Abort = 0x00040000, + Retry = 0x00080000, + Ignore = 0x00100000, + NoButton = 0x00000000, +} +export enum Icon { + NoIcon = 0, + Question = 4, + Information = 1, + Warning = 2, + Critical = 3, +} + +export enum ButtonRole { + InvalidRole, + AcceptRole, + RejectRole, + DestructiveRole, + ActionRole, + HelpRole, + YesRole, + NoRole, + ApplyRole, + ResetRole, +} +export class QMessageBox extends NodeDialog { + native: NativeElement; + constructor(); + constructor(parent: NodeWidget); + constructor(parent?: NodeWidget) { + let native; + if (parent) { + native = new addon.QMessageBox(parent.native); + } else { + native = new addon.QMessageBox(); + } + super(native); + this.native = native; + this.setNodeParent(parent); + } + accept(): void { + this.native.accept(); + } + done(r: number): void { + this.native.done(r); + } + setText(text: string): void { + this.native.setProperty('text', text); + } + + text(): string { + return this.property('text').toString(); + } + + setInformativeText(informativeText: string): void { + this.native.setProperty('informativeText', informativeText); + } + + setDetailedText(detailedText: string): void { + this.native.setProperty('detailedText', detailedText); + } + + detailedText(): string { + return this.property('detailedText').toString(); + } + + setDefaultButton(button: QPushButton): void { + this.native.setDefaultButton(button); + this.nodeChildren.add(button); + } + + addButton(button: QAbstractButton, role: ButtonRole = ButtonRole.NoRole): void { + this.native.addButton(button.native, role); + this.nodeChildren.add(button); + } + + static about(parent: NodeWidget, title: string, text: string): void { + addon.QMessageBox.about(parent.native, title, text); + } + + static aboutQt(parent: NodeWidget, title: string): void { + addon.QMessageBox.aboutQt(parent.native, title); + } +} diff --git a/src/lib/QtWidgets/QPushButton.ts b/src/lib/QtWidgets/QPushButton.ts index 21531d4ef..4a8de6f12 100644 --- a/src/lib/QtWidgets/QPushButton.ts +++ b/src/lib/QtWidgets/QPushButton.ts @@ -1,7 +1,8 @@ import addon from '../utils/addon'; import { NodeWidget } from './QWidget'; -import { NativeElement } from '../core/Component'; +import { NativeElement, NativeRawPointer, Component } from '../core/Component'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; +import { checkIfNativeElement, checkIfNapiExternal } from '../utils/helpers'; export type QPushButtonSignals = QAbstractButtonSignals; /** @@ -25,16 +26,25 @@ export class QPushButton extends QAbstractButton { native: NativeElement; constructor(); constructor(parent: NodeWidget); - constructor(parent?: NodeWidget) { + constructor(native: NativeElement); + constructor(rawPointer: NativeRawPointer, disableNativeDeletion?: boolean); + constructor(arg?: NodeWidget | NativeRawPointer | NativeElement, disableNativeDeletion = true) { let native; - if (parent) { - native = new addon.QPushButton(parent.native); + let parent: Component | undefined; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (checkIfNapiExternal(arg)) { + native = new addon.QPushButton(arg, disableNativeDeletion); + } else if (arg) { + const parentWidget = arg as NodeWidget; + native = new addon.QPushButton(parentWidget.native); + parent = parentWidget; } else { native = new addon.QPushButton(); } super(native); - this.setNodeParent(parent); this.native = native; + parent && this.setNodeParent(parent); } setFlat(isFlat: boolean): void { this.native.setFlat(isFlat); diff --git a/src/lib/QtWidgets/QRadioButton.ts b/src/lib/QtWidgets/QRadioButton.ts index e554a3de7..64303df19 100644 --- a/src/lib/QtWidgets/QRadioButton.ts +++ b/src/lib/QtWidgets/QRadioButton.ts @@ -1,7 +1,8 @@ import addon from '../utils/addon'; import { NodeWidget } from './QWidget'; -import { NativeElement } from '../core/Component'; +import { NativeElement, NativeRawPointer, Component } from '../core/Component'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; +import { checkIfNativeElement, checkIfNapiExternal } from '../utils/helpers'; export type QRadioButtonSignals = QAbstractButtonSignals; @@ -27,15 +28,23 @@ export class QRadioButton extends QAbstractButton { native: NativeElement; constructor(); constructor(parent: NodeWidget); - constructor(parent?: NodeWidget) { + constructor(rawPointer: NativeRawPointer, disableNativeDeletion?: boolean); + constructor(arg?: NodeWidget | NativeRawPointer | NativeElement, disableNativeDeletion = true) { let native; - if (parent) { - native = new addon.QRadioButton(parent.native); + let parent: Component | undefined; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (checkIfNapiExternal(arg)) { + native = new addon.QRadioButton(arg, disableNativeDeletion); + } else if (arg) { + const parentWidget = arg as NodeWidget; + native = new addon.QRadioButton(parentWidget.native); + parent = parentWidget; } else { native = new addon.QRadioButton(); } super(native); this.native = native; - this.setNodeParent(parent); + parent && this.setNodeParent(parent); } } diff --git a/src/lib/QtWidgets/QToolButton.ts b/src/lib/QtWidgets/QToolButton.ts index aadebc0c1..91492741a 100644 --- a/src/lib/QtWidgets/QToolButton.ts +++ b/src/lib/QtWidgets/QToolButton.ts @@ -1,11 +1,12 @@ import addon from '../utils/addon'; import { NodeWidget } from './QWidget'; -import { NativeElement } from '../core/Component'; +import { NativeElement, NativeRawPointer, Component } from '../core/Component'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; import { ToolButtonStyle } from '../QtEnums/ToolButtonStyle'; import { ArrowType } from '../QtEnums/ArrowType'; import { QAction } from '../QtWidgets/QAction'; import { QMenu } from './QMenu'; +import { checkIfNativeElement, checkIfNapiExternal } from '../utils/helpers'; export enum ToolButtonPopupMode { DelayedPopup, @@ -20,16 +21,23 @@ export class QToolButton extends QAbstractButton { native: NativeElement; constructor(); constructor(parent: NodeWidget); - constructor(parent?: NodeWidget) { + constructor(rawPointer: NativeRawPointer, disableNativeDeletion?: boolean); + constructor(arg?: NodeWidget | NativeRawPointer | NativeElement, disableNativeDeletion = true) { let native; - if (parent) { - native = new addon.QToolButton(parent.native); + let parent: Component | undefined; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (checkIfNapiExternal(arg)) { + native = new addon.QToolButton(arg, disableNativeDeletion); + } else if (arg) { + const parentWidget = arg as NodeWidget; + native = new addon.QToolButton(parentWidget.native); } else { native = new addon.QToolButton(); } super(native); - this.setNodeParent(parent); this.native = native; + parent && this.setNodeParent(parent); } setArrowType(type: ArrowType): void { this.native.setArrowType(type); diff --git a/src/lib/core/Component.ts b/src/lib/core/Component.ts index 7d6b49c83..159e4bb9f 100644 --- a/src/lib/core/Component.ts +++ b/src/lib/core/Component.ts @@ -1,5 +1,7 @@ export type NativeElement = { type: 'native'; [key: string]: any }; +export type NativeRawPointer = {}; + /** > Abstract class that is root most base class for all widgets and layouts in the NodeGui World. diff --git a/src/lib/core/EventWidget.ts b/src/lib/core/EventWidget.ts index 6531c1467..67e8309a5 100644 --- a/src/lib/core/EventWidget.ts +++ b/src/lib/core/EventWidget.ts @@ -1,5 +1,5 @@ import { EventEmitter } from 'events'; -import { NativeElement, Component } from './Component'; +import { NativeElement, Component, NativeRawPointer } from './Component'; /** @@ -65,14 +65,14 @@ export abstract class EventWidget extends Component { button.addEventListener(WidgetEventTypes.HoverEnter,()=>console.log("hovered")); ``` */ - addEventListener(eventType: WidgetEventTypes, callback: (event?: NativeElement) => void): void; + addEventListener(eventType: WidgetEventTypes, callback: (event?: NativeRawPointer<'QEvent'>) => void): void; addEventListener(eventOrSignalType: string, callback: (...payloads: any[]) => void): void { this.native.subscribeToQtEvent(eventOrSignalType); this.emitter.addListener(eventOrSignalType, callback); } removeEventListener(signalType: SignalType, callback: Signals[SignalType]): void; - removeEventListener(eventType: WidgetEventTypes, callback: (event?: NativeElement) => void): void; + removeEventListener(eventType: WidgetEventTypes, callback: (event?: NativeRawPointer<'QEvent'>) => void): void; removeEventListener(eventOrSignalType: string, callback?: (...payloads: any[]) => void): void { if (callback) { this.emitter.removeListener(eventOrSignalType, callback); diff --git a/src/lib/core/YogaWidget.ts b/src/lib/core/YogaWidget.ts index bbed07fa7..c3cb0fad2 100644 --- a/src/lib/core/YogaWidget.ts +++ b/src/lib/core/YogaWidget.ts @@ -1,6 +1,7 @@ import { NodeObject, QObjectSignals } from '../QtCore/QObject'; +import { NativeRawPointer } from './Component'; -export type FlexNode = {}; +export type FlexNode = NativeRawPointer<'YGNodeRef'>; /** diff --git a/src/lib/utils/helpers.ts b/src/lib/utils/helpers.ts index dc2943aef..0f70cbb79 100644 --- a/src/lib/utils/helpers.ts +++ b/src/lib/utils/helpers.ts @@ -1,6 +1,11 @@ import { NativeElement } from '../core/Component'; +import addon from './addon'; export function checkIfNativeElement(arg: any): boolean { const nativeArg = arg as NativeElement; return typeof nativeArg === 'object' && nativeArg.type === 'native'; } + +export function checkIfNapiExternal(arg: any): boolean { + return addon.NUtils.isNapiExternal(arg); +}