Add style() getter in QApplication (#249)
Add minimal QStyle implementation with just pixelMetric getter (allow getting the scrollbars width)
This commit is contained in:
parent
b0c9bca53a
commit
a8cc7d9441
@ -45,6 +45,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QMovie/qmovie_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QObject/qobject_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QVariant/qvariant_wrap.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QSize/qsize_wrap.cpp"
|
||||
|
||||
@ -34,4 +34,5 @@ class QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
|
||||
namespace StaticQApplicationWrapMethods {
|
||||
Napi::Value instance(const Napi::CallbackInfo& info);
|
||||
Napi::Value clipboard(const Napi::CallbackInfo& info);
|
||||
} // namespace StaticQApplicationWrapMethods
|
||||
Napi::Value style(const Napi::CallbackInfo& info);
|
||||
} // namespace StaticQApplicationWrapMethods
|
||||
|
||||
22
src/cpp/include/nodegui/QtGui/QStyle/qstyle_wrap.h
Normal file
22
src/cpp/include/nodegui/QtGui/QStyle/qstyle_wrap.h
Normal file
@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include <napi.h>
|
||||
|
||||
#include <QStyle>
|
||||
|
||||
#include "core/Component/component_macro.h"
|
||||
|
||||
class QStyleWrap : public Napi::ObjectWrap<QStyleWrap> {
|
||||
private:
|
||||
QStyle* instance;
|
||||
|
||||
public:
|
||||
static Napi::FunctionReference constructor;
|
||||
static Napi::Object init(Napi::Env env, Napi::Object exports);
|
||||
QStyleWrap(const Napi::CallbackInfo& info);
|
||||
QStyle* getInternalInstance();
|
||||
// Wrapped methods
|
||||
Napi::Value pixelMetric(const Napi::CallbackInfo& info);
|
||||
|
||||
COMPONENT_WRAPPED_METHODS_DECLARATION
|
||||
};
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
#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;
|
||||
@ -22,6 +23,7 @@ Napi::Object QApplicationWrap::init(Napi::Env env, Napi::Object exports) {
|
||||
&QApplicationWrap::quitOnLastWindowClosed),
|
||||
StaticMethod("instance", &StaticQApplicationWrapMethods::instance),
|
||||
StaticMethod("clipboard", &StaticQApplicationWrapMethods::clipboard),
|
||||
StaticMethod("style", &StaticQApplicationWrapMethods::style),
|
||||
COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE});
|
||||
constructor = Napi::Persistent(func);
|
||||
exports.Set(CLASSNAME, func);
|
||||
@ -99,6 +101,15 @@ Napi::Value StaticQApplicationWrapMethods::clipboard(
|
||||
{Napi::External<QClipboard>::New(env, clipboard)});
|
||||
}
|
||||
|
||||
Napi::Value StaticQApplicationWrapMethods::style(
|
||||
const Napi::CallbackInfo& info) {
|
||||
Napi::Env env = info.Env();
|
||||
Napi::HandleScope scope(env);
|
||||
QStyle* style = QApplication::style();
|
||||
return QStyleWrap::constructor.New(
|
||||
{Napi::External<QStyle>::New(env, style)});
|
||||
}
|
||||
|
||||
Napi::Value QApplicationWrap::setQuitOnLastWindowClosed(
|
||||
const Napi::CallbackInfo& info) {
|
||||
Napi::Env env = info.Env();
|
||||
@ -115,4 +126,4 @@ Napi::Value QApplicationWrap::quitOnLastWindowClosed(
|
||||
Napi::HandleScope scope(env);
|
||||
bool quit = this->instance->quitOnLastWindowClosed();
|
||||
return Napi::Value::From(env, quit);
|
||||
}
|
||||
}
|
||||
|
||||
41
src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp
Normal file
41
src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp
Normal file
@ -0,0 +1,41 @@
|
||||
#include "QtGui/QStyle/qstyle_wrap.h"
|
||||
|
||||
#include "Extras/Utils/nutils.h"
|
||||
|
||||
Napi::FunctionReference QStyleWrap::constructor;
|
||||
|
||||
Napi::Object QStyleWrap::init(Napi::Env env, Napi::Object exports) {
|
||||
Napi::HandleScope scope(env);
|
||||
char CLASSNAME[] = "QStyle";
|
||||
Napi::Function func =
|
||||
DefineClass(env, CLASSNAME,
|
||||
{InstanceMethod("pixelMetric", &QStyleWrap::pixelMetric),
|
||||
COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE});
|
||||
constructor = Napi::Persistent(func);
|
||||
exports.Set(CLASSNAME, func);
|
||||
return exports;
|
||||
}
|
||||
|
||||
QStyleWrap::QStyleWrap(const Napi::CallbackInfo& info)
|
||||
: Napi::ObjectWrap<QStyleWrap>(info) {
|
||||
Napi::Env env = info.Env();
|
||||
Napi::HandleScope scope(env);
|
||||
if (info[0].IsExternal()) {
|
||||
this->instance = info[0].As<Napi::External<QStyle>>().Data();
|
||||
} else {
|
||||
Napi::TypeError::New(env, "Incorrect initialization of QStyleWrap")
|
||||
.ThrowAsJavaScriptException();
|
||||
}
|
||||
this->rawData = extrautils::configureComponent(this->getInternalInstance());
|
||||
}
|
||||
|
||||
QStyle* QStyleWrap::getInternalInstance() { return this->instance; }
|
||||
|
||||
Napi::Value QStyleWrap::pixelMetric(const Napi::CallbackInfo& info) {
|
||||
Napi::Env env = info.Env();
|
||||
Napi::HandleScope scope(env);
|
||||
int metricInt = info[0].As<Napi::Number>().Int32Value();
|
||||
QStyle::PixelMetric metric = static_cast<QStyle::PixelMetric>(metricInt);
|
||||
|
||||
return Napi::Value::From(env, this->instance->pixelMetric(metric));
|
||||
}
|
||||
@ -14,6 +14,7 @@
|
||||
#include "QtGui/QKeySequence/qkeysequence_wrap.h"
|
||||
#include "QtGui/QMovie/qmovie_wrap.h"
|
||||
#include "QtGui/QPixmap/qpixmap_wrap.h"
|
||||
#include "QtGui/QStyle/qstyle_wrap.h"
|
||||
#include "QtWidgets/QAction/qaction_wrap.h"
|
||||
#include "QtWidgets/QBoxLayout/qboxlayout_wrap.h"
|
||||
#include "QtWidgets/QCheckBox/qcheckbox_wrap.h"
|
||||
@ -57,6 +58,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) {
|
||||
QKeySequenceWrap::init(env, exports);
|
||||
QIconWrap::init(env, exports);
|
||||
QMovieWrap::init(env, exports);
|
||||
QStyleWrap::init(env, exports);
|
||||
QCursorWrap::init(env, exports);
|
||||
QBoxLayoutWrap::init(env, exports);
|
||||
QGridLayoutWrap::init(env, exports);
|
||||
|
||||
@ -11,6 +11,7 @@ export { QMovie, CacheMode, MovieState, QMovieEvents } from './lib/QtGui/QMovie'
|
||||
export { QCursor } from './lib/QtGui/QCursor';
|
||||
export { QTextOptionWrapMode } from './lib/QtGui/QTextOption';
|
||||
export { QClipboard, QClipboardMode } from './lib/QtGui/QClipboard';
|
||||
export { QStyle, QStylePixelMetric } from './lib/QtGui/QStyle';
|
||||
// Events: Maybe a separate module ?
|
||||
export { QKeyEvent } from './lib/QtGui/QEvent/QKeyEvent';
|
||||
export { QMouseEvent } from './lib/QtGui/QEvent/QMouseEvent';
|
||||
|
||||
@ -2,6 +2,7 @@ import addon from '../utils/addon';
|
||||
import { Component, NativeElement } from '../core/Component';
|
||||
import { checkIfNativeElement } from '../utils/helpers';
|
||||
import { QClipboard } from './QClipboard';
|
||||
import { QStyle } from './QStyle';
|
||||
|
||||
type arg = NativeElement;
|
||||
export class QApplication extends Component {
|
||||
@ -39,4 +40,7 @@ export class QApplication extends Component {
|
||||
quitOnLastWindowClosed(): boolean {
|
||||
return this.native.quitOnLastWindowClosed();
|
||||
}
|
||||
static style(): QStyle {
|
||||
return new QStyle(addon.QApplication.style());
|
||||
}
|
||||
}
|
||||
|
||||
65
src/lib/QtGui/QStyle.ts
Normal file
65
src/lib/QtGui/QStyle.ts
Normal file
@ -0,0 +1,65 @@
|
||||
import { Component, NativeElement } from '../core/Component';
|
||||
import { checkIfNativeElement } from '../utils/helpers';
|
||||
|
||||
export class QStyle extends Component {
|
||||
native: NativeElement;
|
||||
constructor(native: NativeElement) {
|
||||
super();
|
||||
if (checkIfNativeElement(native)) {
|
||||
this.native = native;
|
||||
} else {
|
||||
throw new Error('QStyle cannot be initialised this way. Use QApplication::style()');
|
||||
}
|
||||
}
|
||||
|
||||
pixelMetric(metric: QStylePixelMetric): number {
|
||||
return this.native.pixelMetric(metric);
|
||||
}
|
||||
}
|
||||
|
||||
export enum QStylePixelMetric {
|
||||
PM_ButtonMargin = 0,
|
||||
PM_ButtonDefaultIndicator = 1,
|
||||
PM_MenuButtonIndicator = 2,
|
||||
PM_ButtonShiftHorizontal = 3,
|
||||
PM_ButtonShiftVertical = 4,
|
||||
PM_DefaultFrameWidth = 5,
|
||||
PM_SpinBoxFrameWidth = 6,
|
||||
PM_ComboBoxFrameWidth = 7,
|
||||
PM_MaximumDragDistance = 8,
|
||||
PM_ScrollBarExtent = 9,
|
||||
PM_ScrollBarSliderMin = 10,
|
||||
PM_SliderThickness = 11,
|
||||
PM_SliderControlThickness = 12,
|
||||
PM_SliderLength = 13,
|
||||
PM_SliderTickmarkOffset = 14,
|
||||
PM_SliderSpaceAvailable = 15,
|
||||
PM_DockWidgetSeparatorExtent = 16,
|
||||
PM_DockWidgetHandleExtent = 17,
|
||||
PM_DockWidgetFrameWidth = 18,
|
||||
PM_MenuBarPanelWidth = 33,
|
||||
PM_MenuBarItemSpacing = 34,
|
||||
PM_MenuBarHMargin = 36,
|
||||
PM_MenuBarVMargin = 35,
|
||||
PM_TabBarTabOverlap = 19,
|
||||
PM_TabBarTabHSpace = 20,
|
||||
PM_TabBarTabVSpace = 21,
|
||||
PM_TabBarBaseHeight = 22,
|
||||
PM_TabBarBaseOverlap = 23,
|
||||
PM_ProgressBarChunkWidth = 24,
|
||||
PM_SplitterWidth = 25,
|
||||
PM_TitleBarHeight = 26,
|
||||
PM_IndicatorWidth = 37,
|
||||
PM_IndicatorHeight = 38,
|
||||
PM_ExclusiveIndicatorWidth = 39,
|
||||
PM_ExclusiveIndicatorHeight = 40,
|
||||
PM_MenuPanelWidth = 30,
|
||||
PM_MenuHMargin = 28,
|
||||
PM_MenuVMargin = 29,
|
||||
PM_MenuScrollerHeight = 27,
|
||||
PM_MenuTearoffHeight = 31,
|
||||
PM_MenuDesktopFrameWidth = 32,
|
||||
PM_CheckListButtonSize = 41,
|
||||
PM_CheckListControllerSize = 42,
|
||||
PM_MdiSubWindowFrameWidth = 46,
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user