Makes QApplication custom

This commit is contained in:
Atul R 2020-02-14 21:57:40 +01:00
parent b600010951
commit 6d79995a6e
6 changed files with 39 additions and 20 deletions

View File

@ -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"

View File

@ -0,0 +1,17 @@
#pragma once
#include <QApplication>
#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
}
};

View File

@ -2,7 +2,7 @@
#include <napi.h>
#include <QApplication>
#include "napplication.hpp"
#include <QPointer>
#include "Extras/Export/export.h"
@ -12,9 +12,7 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
COMPONENT_WRAPPED_METHODS_DECLARATION
private:
QPointer<QApplication> instance;
static int argc;
static char** argv;
QPointer<NApplication> instance;
bool _wasManuallyCreated = false;
public:
@ -22,7 +20,7 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
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);

View File

@ -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<Napi::External<QApplication>>().Data();
this->instance = info[0].As<Napi::External<NApplication>>().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<QApplication*>(QCoreApplication::instance());
NApplication* app = static_cast<NApplication*>(QCoreApplication::instance());
Napi::Object instance = QApplicationWrap::constructor.New(
{Napi::External<QApplication>::New(env, app)});
{Napi::External<NApplication>::New(env, app)});
return instance;
}

View File

@ -1,11 +1,10 @@
#include "core/Integration/integration.h"
#include <QApplication>
#include "QtGui/QApplication/napplication.hpp"
#include <QFont>
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();

View File

@ -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<QApplicationSignals> {
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;