diff --git a/CMakeLists.txt b/CMakeLists.txt index 38e75866e..721b43fc0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,6 +113,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${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/QtGui/QApplication/napplication.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" diff --git a/src/cpp/include/nodegui/QtGui/QApplication/napplication.hpp b/src/cpp/include/nodegui/QtGui/QApplication/napplication.hpp new file mode 100644 index 000000000..3feb29a43 --- /dev/null +++ b/src/cpp/include/nodegui/QtGui/QApplication/napplication.hpp @@ -0,0 +1,17 @@ +#pragma once +#include + +#include "Extras/Export/export.h" +#include "QtCore/QObject/qobject_macro.h" +#include "napi.h" + +class DLL_EXPORT NApplication : public QApplication, public EventWidget { + Q_OBJECT + EVENTWIDGET_IMPLEMENTATIONS(QApplication) + public: + using QApplication::QApplication; // inherit all constructors of QApplication + void connectSignalsToEventEmitter() { + // Qt Connects: Implement all signal connects here + QOBJECT_SIGNALS + } +}; diff --git a/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h index 5a97f6258..38a3098df 100644 --- a/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h @@ -2,7 +2,7 @@ #include -#include +#include "napplication.hpp" #include #include "Extras/Export/export.h" @@ -12,9 +12,7 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap { COMPONENT_WRAPPED_METHODS_DECLARATION private: - QPointer instance; - static int argc; - static char** argv; + QPointer instance; bool _wasManuallyCreated = false; public: @@ -22,7 +20,7 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap { static Napi::Object init(Napi::Env env, Napi::Object exports); QApplicationWrap(const Napi::CallbackInfo& info); ~QApplicationWrap(); - QApplication* getInternalInstance(); + NApplication* getInternalInstance(); // Wrapped methods Napi::Value processEvents(const Napi::CallbackInfo& info); Napi::Value exec(const Napi::CallbackInfo& info); diff --git a/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp index 6be4cc239..a1303cba7 100644 --- a/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp +++ b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp @@ -1,12 +1,11 @@ #include "QtGui/QApplication/qapplication_wrap.h" +#include "core/Integration/integration.h" #include "Extras/Utils/nutils.h" #include "QtGui/QClipboard/qclipboard_wrap.h" #include "QtGui/QStyle/qstyle_wrap.h" Napi::FunctionReference QApplicationWrap::constructor; -int QApplicationWrap::argc = 0; -char** QApplicationWrap::argv = NULL; Napi::Object QApplicationWrap::init(Napi::Env env, Napi::Object exports) { Napi::HandleScope scope(env); @@ -35,9 +34,9 @@ QApplicationWrap::QApplicationWrap(const Napi::CallbackInfo& info) Napi::Env env = info.Env(); Napi::HandleScope scope(env); if (info.Length() == 1) { - this->instance = info[0].As>().Data(); + this->instance = info[0].As>().Data(); } else if (info.Length() == 0) { - this->instance = new QApplication(this->argc, this->argv); + this->instance = new NApplication(qode::qode_argc, qode::qode_argv); this->_wasManuallyCreated = true; } else { Napi::TypeError::New(env, "Wrong number of arguments") @@ -51,7 +50,7 @@ QApplicationWrap::~QApplicationWrap() { } } -QApplication* QApplicationWrap::getInternalInstance() { return this->instance; } +NApplication* QApplicationWrap::getInternalInstance() { return this->instance; } Napi::Value QApplicationWrap::processEvents(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); @@ -86,9 +85,9 @@ Napi::Value StaticQApplicationWrapMethods::instance( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); - QApplication* app = static_cast(QCoreApplication::instance()); + NApplication* app = static_cast(QCoreApplication::instance()); Napi::Object instance = QApplicationWrap::constructor.New( - {Napi::External::New(env, app)}); + {Napi::External::New(env, app)}); return instance; } diff --git a/src/cpp/lib/core/Integration/integration.cpp b/src/cpp/lib/core/Integration/integration.cpp index e405751d0..3549ed1d8 100644 --- a/src/cpp/lib/core/Integration/integration.cpp +++ b/src/cpp/lib/core/Integration/integration.cpp @@ -1,11 +1,10 @@ #include "core/Integration/integration.h" - -#include +#include "QtGui/QApplication/napplication.hpp" #include namespace qodeIntegration { -static QApplication* app; +static NApplication* app; bool QtRunLoopWrapper() { int exitCode = app->exec(); @@ -15,7 +14,7 @@ bool QtRunLoopWrapper() { void integrate() { // Bootstrap Qt - app = new QApplication(qode::qode_argc, qode::qode_argv); + app = new NApplication(qode::qode_argc, qode::qode_argv); qode::InjectQodeRunLoop(&QtRunLoopWrapper); // Other init settings QFont f = QApplication::font(); diff --git a/src/lib/QtGui/QApplication.ts b/src/lib/QtGui/QApplication.ts index a146c4226..d53ec0e2f 100644 --- a/src/lib/QtGui/QApplication.ts +++ b/src/lib/QtGui/QApplication.ts @@ -3,6 +3,7 @@ import { Component, NativeElement } from '../core/Component'; import { checkIfNativeElement } from '../utils/helpers'; import { QClipboard } from './QClipboard'; import { QStyle } from './QStyle'; +import { QObjectSignals, NodeObject } from '../QtCore/QObject'; /** @@ -21,17 +22,19 @@ const qApp = QApplication.instance(); qApp.quit(); ``` */ -export class QApplication extends Component { +export class QApplication extends NodeObject { native: NativeElement; constructor(); constructor(native: NativeElement); constructor(arg?: NativeElement) { - super(); + let native: NativeElement; if (checkIfNativeElement(arg)) { - this.native = arg as NativeElement; + native = arg as NativeElement; } else { - this.native = new addon.QApplication(); + native = new addon.QApplication(); } + super(native); + this.native = native; } static clipboard(): QClipboard { return new QClipboard(addon.QApplication.clipboard()); @@ -62,3 +65,5 @@ export class QApplication extends Component { return new QStyle(addon.QApplication.style()); } } + +export type QApplicationSignals = QObjectSignals;