Add QStyleFactory and bits to set the app style

This commit is contained in:
Simon Edwards 2021-08-28 10:48:18 +02:00
parent 25f529757e
commit c3c597df4d
9 changed files with 87 additions and 0 deletions

View File

@ -146,6 +146,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStandardItem/qstandarditem_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStandardItem/qstandarditem_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSvgWidget/qsvgwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSvgWidget/qsvgwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDesktopWidget/qdesktopwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDesktopWidget/qdesktopwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStyleFactory/qstylefactory_wrap.cpp"
# Custom widgets (include them for automoc since they contain Q_OBJECT) # Custom widgets (include them for automoc since they contain Q_OBJECT)
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QAbstractItemModel/nabstractitemmodel.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QAbstractItemModel/nabstractitemmodel.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QItemSelectionModel/nitemselectionmodel.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtCore/QItemSelectionModel/nitemselectionmodel.hpp"

View File

@ -35,5 +35,6 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
namespace StaticQApplicationWrapMethods { namespace StaticQApplicationWrapMethods {
DLL_EXPORT Napi::Value instance(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value instance(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value clipboard(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value clipboard(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value setStyle(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value style(const Napi::CallbackInfo& info); DLL_EXPORT Napi::Value style(const Napi::CallbackInfo& info);
} // namespace StaticQApplicationWrapMethods } // namespace StaticQApplicationWrapMethods

View File

@ -0,0 +1,9 @@
#pragma once
#include <napi.h>
namespace QStyleFactoryWrap {
DLL_EXPORT Napi::Object create(Napi::Env env, Napi::Object exports);
DLL_EXPORT Napi::Object keys(Napi::Env env, Napi::Object exports);
DLL_EXPORT Napi::Object init(Napi::Env env, Napi::Object exports);
} // namespace QStyleFactoryWrap

View File

@ -25,6 +25,7 @@ Napi::Object QApplicationWrap::init(Napi::Env env, Napi::Object exports) {
InstanceMethod("setStyleSheet", &QApplicationWrap::setStyleSheet), InstanceMethod("setStyleSheet", &QApplicationWrap::setStyleSheet),
StaticMethod("instance", &StaticQApplicationWrapMethods::instance), StaticMethod("instance", &StaticQApplicationWrapMethods::instance),
StaticMethod("clipboard", &StaticQApplicationWrapMethods::clipboard), StaticMethod("clipboard", &StaticQApplicationWrapMethods::clipboard),
StaticMethod("setStyle", &StaticQApplicationWrapMethods::setStyle),
StaticMethod("style", &StaticQApplicationWrapMethods::style), StaticMethod("style", &StaticQApplicationWrapMethods::style),
QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(QApplicationWrap)}); QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(QApplicationWrap)});
constructor = Napi::Persistent(func); constructor = Napi::Persistent(func);
@ -125,6 +126,19 @@ Napi::Value StaticQApplicationWrapMethods::clipboard(
{Napi::External<QClipboard>::New(env, clipboard)}); {Napi::External<QClipboard>::New(env, clipboard)});
} }
Napi::Value StaticQApplicationWrapMethods::setStyle(
const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
QStyleWrap* styleWrap =
Napi::ObjectWrap<QStyleWrap>::Unwrap(info[0].As<Napi::Object>());
QStyle* style = styleWrap->getInternalInstance();
QApplication::setStyle(style);
return env.Null();
}
Napi::Value StaticQApplicationWrapMethods::style( Napi::Value StaticQApplicationWrapMethods::style(
const Napi::CallbackInfo& info) { const Napi::CallbackInfo& info) {
Napi::Env env = info.Env(); Napi::Env env = info.Env();

View File

@ -0,0 +1,40 @@
#include <nodegui/Extras/Utils/nutils.h>
#include <QStyleFactory>
#include "QtGui/QStyle/qstyle_wrap.h"
namespace QStyleFactoryWrap {
Napi::Value create(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::String key = info[0].As<Napi::String>();
QStyle* style =
QStyleFactory::create(QString::fromStdString(key.Utf8Value()));
if (!style) {
return env.Null();
}
return QStyleWrap::constructor.New({Napi::External<QStyle>::New(env, style)});
}
Napi::Value keys(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
QStringList keys = QStyleFactory::keys();
Napi::Array keysNapi = Napi::Array::New(env, keys.size());
for (int i = 0; i < keys.size(); i++) {
keysNapi[i] = Napi::String::New(env, keys[i].toStdString());
}
return keysNapi;
}
Napi::Object init(Napi::Env env, Napi::Object exports) {
exports.Set("QStyleFactory_create", Napi::Function::New<create>(env));
exports.Set("QStyleFactory_keys", Napi::Function::New<keys>(env));
return exports;
}
} // namespace QStyleFactoryWrap

View File

@ -94,6 +94,7 @@
#include "QtWidgets/QStandardItem/qstandarditem_wrap.h" #include "QtWidgets/QStandardItem/qstandarditem_wrap.h"
#include "QtWidgets/QStandardItemModel/qstandarditemmodel_wrap.h" #include "QtWidgets/QStandardItemModel/qstandarditemmodel_wrap.h"
#include "QtWidgets/QStatusBar/qstatusbar_wrap.h" #include "QtWidgets/QStatusBar/qstatusbar_wrap.h"
#include "QtWidgets/QStyleFactory/qstylefactory_wrap.h"
#include "QtWidgets/QSvgWidget/qsvgwidget_wrap.h" #include "QtWidgets/QSvgWidget/qsvgwidget_wrap.h"
#include "QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h" #include "QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h"
#include "QtWidgets/QTabBar/qtabbar_wrap.h" #include "QtWidgets/QTabBar/qtabbar_wrap.h"
@ -226,6 +227,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) {
QAbstractItemModelWrap::init(env, exports); QAbstractItemModelWrap::init(env, exports);
QHeaderViewWrap::init(env, exports); QHeaderViewWrap::init(env, exports);
QItemSelectionModelWrap::init(env, exports); QItemSelectionModelWrap::init(env, exports);
QStyleFactoryWrap::init(env, exports);
return exports; return exports;
} }

View File

@ -136,6 +136,8 @@ export {
QTextEditLineWrapMode, QTextEditLineWrapMode,
WrapMode, WrapMode,
} from './lib/QtWidgets/QTextEdit'; } from './lib/QtWidgets/QTextEdit';
export { QStyleFactory } from './lib/QtWidgets/QStyleFactory';
// Core // Core
export { QAbstractItemModel } from './lib/QtCore/QAbstractItemModel'; export { QAbstractItemModel } from './lib/QtCore/QAbstractItemModel';
export { QAbstractTableModel } from './lib/QtCore/QAbstractTableModel'; export { QAbstractTableModel } from './lib/QtCore/QAbstractTableModel';

View File

@ -74,6 +74,9 @@ export class QApplication extends NodeObject<QApplicationSignals> {
const preparedSheet = StyleSheet.create(styleSheet); const preparedSheet = StyleSheet.create(styleSheet);
this.native.setStyleSheet(preparedSheet); this.native.setStyleSheet(preparedSheet);
} }
static setStyle(style: QStyle): void {
addon.QApplication.setStyle(style.native);
}
static style(): QStyle { static style(): QStyle {
return new QStyle(addon.QApplication.style()); return new QStyle(addon.QApplication.style());
} }

View File

@ -0,0 +1,15 @@
import addon from '../utils/addon';
import { QStyle } from '../QtGui/QStyle';
export class QStyleFactory {
static create(key: string): QStyle | null {
const qstyle = addon.QStyleFactory_create(key);
if (qstyle == null) {
return null;
}
return new QStyle(qstyle);
}
static keys(): string[] {
return addon.QStyleFactory_keys();
}
}