Adds qclipboard

This commit is contained in:
Atul R 2019-09-05 19:36:31 +02:00
parent 6cb1be07ce
commit 0ff2c8d2a9
9 changed files with 138 additions and 7 deletions

View File

@ -11,6 +11,7 @@
"../src/cpp/core/YogaWidget/yogawidget.cpp", "../src/cpp/core/YogaWidget/yogawidget.cpp",
# wrapped cpps. Move non wrapped ones to shared gypi # wrapped cpps. Move non wrapped ones to shared gypi
"../src/cpp/QtGui/QApplication/qapplication_wrap.cpp", "../src/cpp/QtGui/QApplication/qapplication_wrap.cpp",
"../src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp",
"../src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp", "../src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp",
"../src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp", "../src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp",
"../src/cpp/QtGui/QIcon/qicon_wrap.cpp", "../src/cpp/QtGui/QIcon/qicon_wrap.cpp",

View File

@ -1,6 +1,7 @@
#include "qapplication_wrap.h" #include "qapplication_wrap.h"
#include "src/cpp/core/Component/component_macro.h" #include "src/cpp/core/Component/component_macro.h"
#include "src/cpp/Extras/Utils/nutils.h" #include "src/cpp/Extras/Utils/nutils.h"
#include "src/cpp/QtGui/QClipboard/qclipboard_wrap.h"
Napi::FunctionReference QApplicationWrap::constructor; Napi::FunctionReference QApplicationWrap::constructor;
int QApplicationWrap::argc = 0; int QApplicationWrap::argc = 0;
@ -28,22 +29,24 @@ QApplicationWrap::QApplicationWrap(const Napi::CallbackInfo& info)
Napi::Env env = info.Env(); Napi::Env env = info.Env();
Napi::HandleScope scope(env); Napi::HandleScope scope(env);
if(info.Length() == 1) { if(info.Length() == 1) {
this->instance = std::unique_ptr<QApplication>(info[0].As<Napi::External<QApplication>>().Data()); this->instance = info[0].As<Napi::External<QApplication>>().Data();
} else if (info.Length() == 0){ } else if (info.Length() == 0){
this->instance = std::make_unique<QApplication>(this->argc, this->argv); this->instance = new QApplication(this->argc, this->argv);
this->_wasManuallyCreated = true;
} else { } else {
Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException();
} }
} }
QApplicationWrap::~QApplicationWrap() QApplicationWrap::~QApplicationWrap()
{ {
this->instance.reset(); if(this->_wasManuallyCreated){
delete this->instance;
}
} }
QApplication* QApplicationWrap::getInternalInstance() QApplication* QApplicationWrap::getInternalInstance()
{ {
return this->instance.get(); return this->instance;
} }
Napi::Value QApplicationWrap::processEvents(const Napi::CallbackInfo& info) Napi::Value QApplicationWrap::processEvents(const Napi::CallbackInfo& info)
@ -87,3 +90,11 @@ Napi::Value StaticQApplicationWrapMethods::instance(const Napi::CallbackInfo& in
Napi::Object instance = QApplicationWrap::constructor.New({ Napi::External<QApplication>::New(env, app) }); Napi::Object instance = QApplicationWrap::constructor.New({ Napi::External<QApplication>::New(env, app) });
return instance; return instance;
} }
Napi::Value StaticQApplicationWrapMethods::clipboard(const Napi::CallbackInfo& info)
{
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
QClipboard* clipboard = QApplication::clipboard();
return QClipboardWrap::constructor.New({ Napi::External<QClipboard>::New(env, clipboard) });
}

View File

@ -1,15 +1,15 @@
#pragma once #pragma once
#include <napi.h> #include <napi.h>
#include <stdlib.h>
#include <QApplication> #include <QApplication>
class QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> { class QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
private: private:
std::unique_ptr<QApplication> instance; QApplication* instance;
static int argc; static int argc;
static char** argv; static char** argv;
bool _wasManuallyCreated = false;
public: public:
static Napi::FunctionReference constructor; static Napi::FunctionReference constructor;
@ -26,4 +26,5 @@ public:
namespace StaticQApplicationWrapMethods { namespace StaticQApplicationWrapMethods {
Napi::Value instance(const Napi::CallbackInfo& info); Napi::Value instance(const Napi::CallbackInfo& info);
Napi::Value clipboard(const Napi::CallbackInfo& info);
} }

View File

@ -0,0 +1,63 @@
#include "qclipboard_wrap.h"
#include "src/cpp/Extras/Utils/nutils.h"
#include "deps/spdlog/spdlog.h"
Napi::FunctionReference QClipboardWrap::constructor;
Napi::Object QClipboardWrap::init(Napi::Env env, Napi::Object exports)
{
Napi::HandleScope scope(env);
char CLASSNAME[] = "QClipboard";
Napi::Function func = DefineClass(env, CLASSNAME, {
InstanceMethod("clear", &QClipboardWrap::clear),
InstanceMethod("setText", &QClipboardWrap::setText),
InstanceMethod("text", &QClipboardWrap::text),
COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE
});
constructor = Napi::Persistent(func);
exports.Set(CLASSNAME, func);
return exports;
}
QClipboardWrap::QClipboardWrap(const Napi::CallbackInfo &info) : Napi::ObjectWrap<QClipboardWrap>(info)
{
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
if (info[0].IsExternal()) {
this->instance = info[0].As<Napi::External<QClipboard>>().Data();
}
else {
Napi::TypeError::New(env, "Incorrect initialization of QClipboardWrap").ThrowAsJavaScriptException();
}
}
QClipboard *QClipboardWrap::getInternalInstance()
{
return this->instance;
}
Napi::Value QClipboardWrap::clear(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::Number mode = info[0].As<Napi::Number>();
this->instance->clear(static_cast<QClipboard::Mode>(mode.Int32Value()));
return env.Null();
}
Napi::Value QClipboardWrap::setText(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::String text = info[0].As<Napi::String>();
Napi::Number mode = info[1].As<Napi::Number>();
QString clipboardText = text.Utf8Value().c_str();
this->instance->setText(clipboardText, static_cast<QClipboard::Mode>(mode.Int32Value()));
return env.Null();
}
Napi::Value QClipboardWrap::text(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::Number mode = info[0].As<Napi::Number>();
QString text = this->instance->text(static_cast<QClipboard::Mode>(mode.Int32Value()));
return Napi::Value::From(env, text.toStdString());
}

View File

@ -0,0 +1,20 @@
#pragma once
#include <napi.h>
#include <QClipboard>
#include "src/cpp/core/Component/component_macro.h"
class QClipboardWrap : public Napi::ObjectWrap<QClipboardWrap>
{
private:
QClipboard* instance;
public:
static Napi::FunctionReference constructor;
static Napi::Object init(Napi::Env env, Napi::Object exports);
QClipboardWrap(const Napi::CallbackInfo &info);
QClipboard *getInternalInstance();
// Wrapped methods
Napi::Value clear(const Napi::CallbackInfo& info);
Napi::Value setText(const Napi::CallbackInfo& info);
Napi::Value text(const Napi::CallbackInfo& info);
};

View File

@ -1,4 +1,5 @@
#include "src/cpp/QtGui/QApplication/qapplication_wrap.h" #include "src/cpp/QtGui/QApplication/qapplication_wrap.h"
#include "src/cpp/QtGui/QClipboard/qclipboard_wrap.h"
#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" #include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h"
#include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" #include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h"
#include "src/cpp/QtGui/QIcon/qicon_wrap.h" #include "src/cpp/QtGui/QIcon/qicon_wrap.h"
@ -27,6 +28,7 @@ void InitPrivateHelpers(Napi::Env env){
Napi::Object Main(Napi::Env env, Napi::Object exports) { Napi::Object Main(Napi::Env env, Napi::Object exports) {
InitPrivateHelpers(env); InitPrivateHelpers(env);
QApplicationWrap::init(env, exports); QApplicationWrap::init(env, exports);
QClipboardWrap::init(env, exports);
QWidgetWrap::init(env, exports); QWidgetWrap::init(env, exports);
QPixmapWrap::init(env, exports); QPixmapWrap::init(env, exports);
QIconWrap::init(env, exports); QIconWrap::init(env, exports);

View File

@ -6,6 +6,7 @@ export { QPixmap } from "./lib/QtGui/QPixmap";
export { QIcon } from "./lib/QtGui/QIcon"; export { QIcon } from "./lib/QtGui/QIcon";
export { QCursor } from "./lib/QtGui/QCursor"; export { QCursor } from "./lib/QtGui/QCursor";
export { QTextOptionEnums } from "./lib/QtGui/QTextOption"; export { QTextOptionEnums } from "./lib/QtGui/QTextOption";
export { QClipboard, QClipboardMode } from "./lib/QtGui/QClipboard";
// Events: Maybe a separate module ? // Events: Maybe a separate module ?
export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent"; export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent";
export { NativeEvent } from "./lib/core/EventWidget"; export { NativeEvent } from "./lib/core/EventWidget";

View File

@ -1,6 +1,7 @@
import addon from "../../core/addon"; import addon from "../../core/addon";
import { Component, NativeElement } from "../../core/Component"; import { Component, NativeElement } from "../../core/Component";
import { checkIfNativeElement } from "../../utils"; import { checkIfNativeElement } from "../../utils";
import { QClipboard } from "../QClipboard";
type arg = NativeElement; type arg = NativeElement;
export class QApplication extends Component { export class QApplication extends Component {
@ -13,6 +14,9 @@ export class QApplication extends Component {
this.native = new addon.QApplication(); this.native = new addon.QApplication();
} }
} }
static clipboard = (): QClipboard => {
return new QClipboard(addon.QApplication.clipboard());
};
processEvents = () => { processEvents = () => {
this.native.processEvents(); this.native.processEvents();
}; };

View File

@ -0,0 +1,28 @@
import { Component, NativeElement } from "../../core/Component";
import { checkIfNativeElement } from "../../utils";
export class QClipboard extends Component {
native: NativeElement;
constructor(native: NativeElement) {
super();
if (checkIfNativeElement(native)) {
this.native = native;
} else {
throw new Error(
"QClipboard cannot be initialised this way. Use QApplication::clipboard()"
);
}
}
clear = (mode: QClipboardMode) => {
this.native.clear(mode);
};
setText = (text: string, mode: QClipboardMode) => {
this.native.setText(text, mode);
};
}
export enum QClipboardMode {
Clipboard,
Selection,
FindBuffer
}