From 880a8433cbbead1532b51f607f360874e4067fef Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Fri, 30 Jul 2021 09:22:04 +0200 Subject: [PATCH] Add `QApplication.setStyleSheet()` --- .../nodegui/QtGui/QApplication/qapplication_wrap.h | 2 +- .../lib/QtGui/QApplication/qapplication_wrap.cpp | 14 ++++++++++++++ src/lib/QtGui/QApplication.ts | 10 +++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h index 3c7a7c247..1bacae92c 100644 --- a/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h @@ -29,7 +29,7 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap { Napi::Value setQuitOnLastWindowClosed(const Napi::CallbackInfo& info); Napi::Value quitOnLastWindowClosed(const Napi::CallbackInfo& info); Napi::Value palette(const Napi::CallbackInfo& info); - // setStyleSheet + Napi::Value setStyleSheet(const Napi::CallbackInfo& info); }; namespace StaticQApplicationWrapMethods { diff --git a/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp index 7dfb007be..b6dabf880 100644 --- a/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp +++ b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp @@ -22,6 +22,7 @@ Napi::Object QApplicationWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("quitOnLastWindowClosed", &QApplicationWrap::quitOnLastWindowClosed), InstanceMethod("palette", &QApplicationWrap::palette), + InstanceMethod("setStyleSheet", &QApplicationWrap::setStyleSheet), StaticMethod("instance", &StaticQApplicationWrapMethods::instance), StaticMethod("clipboard", &StaticQApplicationWrapMethods::clipboard), StaticMethod("style", &StaticQApplicationWrapMethods::style), @@ -92,6 +93,19 @@ Napi::Value QApplicationWrap::palette(const Napi::CallbackInfo& info) { {Napi::External::New(env, palette)}); } +Napi::Value QApplicationWrap::setStyleSheet(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::String text = info[0].As(); + std::string style = text.Utf8Value(); + QString newStyle = QString::fromStdString(style); + QString currentStyleSheet = this->instance->styleSheet(); + if (newStyle != currentStyleSheet) { + this->instance->setStyleSheet(newStyle); + } + return env.Null(); +} + Napi::Value StaticQApplicationWrapMethods::instance( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); diff --git a/src/lib/QtGui/QApplication.ts b/src/lib/QtGui/QApplication.ts index 3288e7ab1..21a82ff8f 100644 --- a/src/lib/QtGui/QApplication.ts +++ b/src/lib/QtGui/QApplication.ts @@ -6,9 +6,11 @@ import { QStyle } from './QStyle'; import { QObjectSignals, NodeObject } from '../QtCore/QObject'; import { QDesktopWidget } from '../QtWidgets/QDesktopWidget'; import { QPalette } from './QPalette'; +import { StyleSheet } from '../core/Style/StyleSheet'; +import memoizeOne from 'memoize-one'; /** - + > QApplication is the root object for the entire application. It manages app level settings. * **This class is a JS wrapper around Qt's [QApplication class](https://doc.qt.io/qt-5/qapplication.html)** @@ -37,6 +39,8 @@ export class QApplication extends NodeObject { } super(native); this.native = native; + + this.setStyleSheet = memoizeOne(this.setStyleSheet); } static clipboard(): QClipboard { return new QClipboard(addon.QApplication.clipboard()); @@ -66,6 +70,10 @@ export class QApplication extends NodeObject { palette(): QPalette { return new QPalette(this.native.palette()); } + setStyleSheet(styleSheet: string): void { + const preparedSheet = StyleSheet.create(styleSheet); + this.native.setStyleSheet(preparedSheet); + } static style(): QStyle { return new QStyle(addon.QApplication.style()); }