From bfa531f1f45ed48863ed554ddeaabca32853dcc9 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Wed, 11 May 2022 22:28:51 +0200 Subject: [PATCH] Massive TS wrapper update --- .../QDateTimeEdit/qdatetimeedit_macro.h | 16 +++++-- .../QtWidgets/QPushButton/qpushbutton_wrap.h | 1 + .../QtWidgets/QTabWidget/qtabwidget_wrap.h | 1 + .../QtWidgets/QToolButton/qtoolbutton_wrap.h | 1 + .../QPushButton/qpushbutton_wrap.cpp | 11 +++++ .../QtWidgets/QTabWidget/qtabwidget_wrap.cpp | 14 +++++- .../QToolButton/qtoolbutton_wrap.cpp | 11 +++++ src/lib/QtCore/QItemSelectionModel.ts | 2 + src/lib/QtCore/QObject.ts | 6 +-- src/lib/QtGui/QApplication.ts | 9 ++-- src/lib/QtGui/QClipboard.ts | 1 + src/lib/QtGui/QMovie.ts | 16 +++---- src/lib/QtGui/QScreen.ts | 1 + src/lib/QtGui/QWindow.ts | 1 + src/lib/QtWidgets/QAbstractItemView.ts | 5 ++- src/lib/QtWidgets/QAction.ts | 8 ++-- src/lib/QtWidgets/QButtonGroup.ts | 8 ++-- src/lib/QtWidgets/QCalendarWidget.ts | 4 +- src/lib/QtWidgets/QCheckBox.ts | 22 ++++------ src/lib/QtWidgets/QColorDialog.ts | 14 ++++-- src/lib/QtWidgets/QComboBox.ts | 11 ++++- src/lib/QtWidgets/QDateEdit.ts | 12 +++-- src/lib/QtWidgets/QDateTimeEdit.ts | 18 +++----- src/lib/QtWidgets/QDial.ts | 14 +++--- src/lib/QtWidgets/QDialog.ts | 11 ++--- src/lib/QtWidgets/QDoubleSpinBox.ts | 12 +++-- src/lib/QtWidgets/QErrorMessage.ts | 12 +++-- src/lib/QtWidgets/QFileDialog.ts | 11 +++-- src/lib/QtWidgets/QFontDialog.ts | 12 +++-- src/lib/QtWidgets/QFrame.ts | 10 ++--- src/lib/QtWidgets/QGraphicsBlurEffect.ts | 20 ++++----- .../QtWidgets/QGraphicsDropShadowEffect.ts | 22 +++++----- src/lib/QtWidgets/QGridLayout.ts | 13 ++++-- src/lib/QtWidgets/QGroupBox.ts | 11 ++++- src/lib/QtWidgets/QHeaderView.ts | 2 + src/lib/QtWidgets/QInputDialog.ts | 15 +++++-- src/lib/QtWidgets/QLCDNumber.ts | 13 ++++-- src/lib/QtWidgets/QLabel.ts | 17 ++++--- src/lib/QtWidgets/QLineEdit.ts | 13 ++++-- src/lib/QtWidgets/QListView.ts | 6 ++- src/lib/QtWidgets/QListWidget.ts | 16 ++++--- src/lib/QtWidgets/QMainWindow.ts | 2 +- src/lib/QtWidgets/QMenu.ts | 12 +++-- src/lib/QtWidgets/QMenuBar.ts | 17 ++++--- src/lib/QtWidgets/QMessageBox.ts | 16 ++++--- src/lib/QtWidgets/QPlainTextEdit.ts | 14 +++--- src/lib/QtWidgets/QProgressBar.ts | 10 ++++- src/lib/QtWidgets/QProgressDialog.ts | 15 +++++-- src/lib/QtWidgets/QPushButton.ts | 28 +++++------- src/lib/QtWidgets/QRadioButton.ts | 20 ++++----- src/lib/QtWidgets/QScrollArea.ts | 11 +++-- src/lib/QtWidgets/QScrollBar.ts | 12 +++-- src/lib/QtWidgets/QShortcut.ts | 19 ++++++-- src/lib/QtWidgets/QSlider.ts | 12 +++-- src/lib/QtWidgets/QSpinBox.ts | 15 +++++-- src/lib/QtWidgets/QSplitter.ts | 12 +++-- src/lib/QtWidgets/QStackedWidget.ts | 16 ++++--- src/lib/QtWidgets/QStandardItemModel.ts | 14 ++++-- src/lib/QtWidgets/QStatusBar.ts | 44 +++++-------------- src/lib/QtWidgets/QSvgWidget.ts | 10 ++++- src/lib/QtWidgets/QSystemTrayIcon.ts | 20 +++++---- src/lib/QtWidgets/QTabBar.ts | 13 ++++-- src/lib/QtWidgets/QTabWidget.ts | 22 ++++++---- src/lib/QtWidgets/QTableView.ts | 15 +++++-- src/lib/QtWidgets/QTableWidget.ts | 23 +++++++--- src/lib/QtWidgets/QTextBrowser.ts | 12 +++-- src/lib/QtWidgets/QTextEdit.ts | 12 ++--- src/lib/QtWidgets/QTimeEdit.ts | 15 +++++-- src/lib/QtWidgets/QToolButton.ts | 35 +++++---------- src/lib/QtWidgets/QTreeWidget.ts | 15 ++++--- src/lib/utils/helpers.ts | 2 +- 71 files changed, 572 insertions(+), 334 deletions(-) diff --git a/src/cpp/include/nodegui/QtWidgets/QDateTimeEdit/qdatetimeedit_macro.h b/src/cpp/include/nodegui/QtWidgets/QDateTimeEdit/qdatetimeedit_macro.h index c96c1cb2c..06180553c 100644 --- a/src/cpp/include/nodegui/QtWidgets/QDateTimeEdit/qdatetimeedit_macro.h +++ b/src/cpp/include/nodegui/QtWidgets/QDateTimeEdit/qdatetimeedit_macro.h @@ -24,14 +24,24 @@ this->instance->setCalendarWidget( \ calendarWidgetWrap->getInternalInstance()); \ return env.Null(); \ + } \ + Napi::Value calendarWidget(const Napi::CallbackInfo &info) { \ + Napi::Env env = info.Env(); \ + QObject *calendarWidget = this->instance->calendarWidget(); \ + if (calendarWidget) { \ + return WrapperCache::instance.getWrapper(env, calendarWidget); \ + } else { \ + return env.Null(); \ + } \ } #endif // QDATETIMEEDIT_WRAPPED_METHODS_DECLARATION #ifndef QDATETIMEEDIT_WRAPPED_METHODS_EXPORT_DEFINE -#define QDATETIMEEDIT_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \ - QABSTRACTSPINBOX_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \ - InstanceMethod("setCalendarWidget", &WidgetWrapName::setCalendarWidget), +#define QDATETIMEEDIT_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \ + QABSTRACTSPINBOX_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \ + InstanceMethod("setCalendarWidget", &WidgetWrapName::setCalendarWidget), \ + InstanceMethod("calendarWidget", &WidgetWrapName::calendarWidget), #endif // QDATETIMEEDIT_WRAPPED_METHODS_EXPORT_DEFINE diff --git a/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h b/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h index 824bfabd9..941797bb8 100644 --- a/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h @@ -23,5 +23,6 @@ class DLL_EXPORT QPushButtonWrap : public Napi::ObjectWrap { static Napi::FunctionReference constructor; // wrapped methods Napi::Value setMenu(const Napi::CallbackInfo& info); + Napi::Value menu(const Napi::CallbackInfo& info); Napi::Value showMenu(const Napi::CallbackInfo& info); }; diff --git a/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h index f2ef97a9a..b58165901 100644 --- a/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h @@ -31,4 +31,5 @@ class DLL_EXPORT QTabWidgetWrap : public Napi::ObjectWrap { Napi::Value setTabsClosable(const Napi::CallbackInfo &info); Napi::Value setTabText(const Napi::CallbackInfo &info); Napi::Value setTabIcon(const Napi::CallbackInfo &info); + Napi::Value widget(const Napi::CallbackInfo &info); }; diff --git a/src/cpp/include/nodegui/QtWidgets/QToolButton/qtoolbutton_wrap.h b/src/cpp/include/nodegui/QtWidgets/QToolButton/qtoolbutton_wrap.h index 94223291c..ef153296f 100644 --- a/src/cpp/include/nodegui/QtWidgets/QToolButton/qtoolbutton_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QToolButton/qtoolbutton_wrap.h @@ -25,4 +25,5 @@ class DLL_EXPORT QToolButtonWrap : public Napi::ObjectWrap { Napi::Value setMenu(const Napi::CallbackInfo& info); Napi::Value setDefaultAction(const Napi::CallbackInfo& info); Napi::Value showMenu(const Napi::CallbackInfo& info); + Napi::Value defaultAction(const Napi::CallbackInfo& info); }; diff --git a/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp b/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp index 916714ce1..6f5c64b30 100644 --- a/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp @@ -12,6 +12,7 @@ Napi::Object QPushButtonWrap::init(Napi::Env env, Napi::Object exports) { Napi::Function func = DefineClass( env, CLASSNAME, {InstanceMethod("setMenu", &QPushButtonWrap::setMenu), + InstanceMethod("menu", &QPushButtonWrap::menu), InstanceMethod("showMenu", &QPushButtonWrap::showMenu), QABSTRACTBUTTON_WRAPPED_METHODS_EXPORT_DEFINE(QPushButtonWrap)}); constructor = Napi::Persistent(func); @@ -60,6 +61,16 @@ Napi::Value QPushButtonWrap::setMenu(const Napi::CallbackInfo& info) { return env.Null(); } +Napi::Value QPushButtonWrap::menu(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + QObject* menu = this->instance->menu(); + if (menu) { + return WrapperCache::instance.getWrapper(env, menu); + } else { + return env.Null(); + } +} + Napi::Value QPushButtonWrap::showMenu(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); this->instance->showMenu(); diff --git a/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp b/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp index fa873bd85..def4ccd53 100644 --- a/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp @@ -23,6 +23,7 @@ Napi::Object QTabWidgetWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("currentIndex", &QTabWidgetWrap::currentIndex), InstanceMethod("removeTab", &QTabWidgetWrap::removeTab), InstanceMethod("setTabsClosable", &QTabWidgetWrap::setTabsClosable), + InstanceMethod("widget", &QTabWidgetWrap::widget), QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QTabWidgetWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); @@ -159,4 +160,15 @@ Napi::Value QTabWidgetWrap::setTabsClosable(const Napi::CallbackInfo& info) { Napi::Boolean closable = info[0].As(); this->instance->setTabsClosable(closable.Value()); return env.Null(); -} \ No newline at end of file +} + +Napi::Value QTabWidgetWrap::widget(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::Number index = info[0].As(); + QWidget* widget = this->instance->widget(index.Int32Value()); + if (widget) { + return WrapperCache::instance.getWrapper(env, widget); + } else { + return env.Null(); + } +} diff --git a/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp b/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp index d809aa9d1..2bd7bf837 100644 --- a/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QToolButton/qtoolbutton_wrap.cpp @@ -15,6 +15,7 @@ Napi::Object QToolButtonWrap::init(Napi::Env env, Napi::Object exports) { {InstanceMethod("setMenu", &QToolButtonWrap::setMenu), InstanceMethod("setDefaultAction", &QToolButtonWrap::setDefaultAction), InstanceMethod("showMenu", &QToolButtonWrap::showMenu), + InstanceMethod("defaultAction", &QToolButtonWrap::defaultAction), QABSTRACTBUTTON_WRAPPED_METHODS_EXPORT_DEFINE(QToolButtonWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); @@ -75,3 +76,13 @@ Napi::Value QToolButtonWrap::showMenu(const Napi::CallbackInfo& info) { this->instance->showMenu(); return env.Null(); } + +Napi::Value QToolButtonWrap::defaultAction(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + QAction* action = this->instance->defaultAction(); + if (action) { + return WrapperCache::instance.getWrapper(env, action); + } else { + return env.Null(); + } +} diff --git a/src/lib/QtCore/QItemSelectionModel.ts b/src/lib/QtCore/QItemSelectionModel.ts index 665c4c47f..fee8fb14e 100644 --- a/src/lib/QtCore/QItemSelectionModel.ts +++ b/src/lib/QtCore/QItemSelectionModel.ts @@ -3,6 +3,7 @@ import { NativeElement } from '../core/Component'; import { QObject, QObjectSignals } from '../QtCore/QObject'; import { QModelIndex } from './QModelIndex'; import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; export type QItemSelectionModelSignals = QObjectSignals; @@ -102,6 +103,7 @@ export class QItemSelectionModel extends QObject { // TODO: void modelChanged(QAbstractItemModel *model) // TODO: void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) } +wrapperCache.registerWrapper('QItemSelectionModelWrap', QItemSelectionModel); export enum SelectionFlag { NoUpdate = 0x0000, diff --git a/src/lib/QtCore/QObject.ts b/src/lib/QtCore/QObject.ts index 34899473f..d849e3a12 100644 --- a/src/lib/QtCore/QObject.ts +++ b/src/lib/QtCore/QObject.ts @@ -8,12 +8,11 @@ import { wrapperCache } from '../core/WrapperCache'; export class QObject extends EventWidget { constructor(nativeElementOrParent?: NativeElement | QObject) { - let native; - let parent; + let native: NativeElement; if (checkIfNativeElement(nativeElementOrParent)) { native = nativeElementOrParent as NativeElement; } else if (nativeElementOrParent) { - parent = nativeElementOrParent as QObject; + const parent = nativeElementOrParent as QObject; native = new addon.QObject(parent.native); } else { native = new addon.QObject(); @@ -72,6 +71,7 @@ export class QObject extends Ev return this.native.children().map((kid: any) => wrapperCache.getWrapper(kid)); } } +wrapperCache.registerWrapper('QObjectWrap', QObject); export interface QObjectSignals { objectNameChanged: (objectName: string) => void; diff --git a/src/lib/QtGui/QApplication.ts b/src/lib/QtGui/QApplication.ts index eedf26587..63a9bfeb7 100644 --- a/src/lib/QtGui/QApplication.ts +++ b/src/lib/QtGui/QApplication.ts @@ -28,17 +28,17 @@ qApp.quit(); ``` */ export class QApplication extends QObject { - constructor(); - constructor(native: NativeElement); - constructor(arg?: NativeElement) { + constructor(arg?: QObject | NativeElement) { let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QObject; + native = new addon.QApplication(parent.native); } else { native = new addon.QApplication(); } super(native); - this.setStyleSheet = memoizeOne(this.setStyleSheet); } devicePixelRatio(): number { @@ -102,6 +102,7 @@ export class QApplication extends QObject { return new QStyle(addon.QApplication.style()); } } +wrapperCache.registerWrapper('QApplicationWrap', QApplication); export interface QApplicationSignals extends QObjectSignals { focusWindowChanged: () => void; diff --git a/src/lib/QtGui/QClipboard.ts b/src/lib/QtGui/QClipboard.ts index 5799a741b..8326db858 100644 --- a/src/lib/QtGui/QClipboard.ts +++ b/src/lib/QtGui/QClipboard.ts @@ -46,6 +46,7 @@ export class QClipboard extends QObject { return new QPixmap(this.native.pixmap(mode)); } } +wrapperCache.registerWrapper('QClipboardWrap', QClipboard); export enum QClipboardMode { Clipboard = 0, diff --git a/src/lib/QtGui/QMovie.ts b/src/lib/QtGui/QMovie.ts index 14639dd0e..c322cd3c8 100644 --- a/src/lib/QtGui/QMovie.ts +++ b/src/lib/QtGui/QMovie.ts @@ -4,19 +4,16 @@ import { checkIfNativeElement } from '../utils/helpers'; import { QObject, QObjectSignals } from '../QtCore/QObject'; import { QSize } from '../QtCore/QSize'; import { QPixmap } from './QPixmap'; +import { wrapperCache } from '../core/WrapperCache'; export class QMovie extends QObject { - constructor(); - constructor(native: NativeElement); - constructor(parent: QObject); constructor(arg?: QObject | NativeElement) { let native: NativeElement; - if (arg) { - if (checkIfNativeElement(arg)) { - native = arg as NativeElement; - } else { - native = new addon.QMovie(arg); - } + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QObject; + native = new addon.QMovie(parent.native); } else { native = new addon.QMovie(); } @@ -76,6 +73,7 @@ export class QMovie extends QObject { return this.native.frameCount(); } } +wrapperCache.registerWrapper('QMovieWrap', QMovie); export enum CacheMode { CacheNone, diff --git a/src/lib/QtGui/QScreen.ts b/src/lib/QtGui/QScreen.ts index 68debebcb..f7cd375f6 100644 --- a/src/lib/QtGui/QScreen.ts +++ b/src/lib/QtGui/QScreen.ts @@ -94,6 +94,7 @@ export class QScreen extends QObject { return QSize.fromQVariant(this.property('virtualSize')); } } +wrapperCache.registerWrapper('QScreenWrap', QScreen); export interface QScreenSignals extends QObjectSignals { availableGeometryChanged: (geometry: QRect) => void; diff --git a/src/lib/QtGui/QWindow.ts b/src/lib/QtGui/QWindow.ts index c8f98b8e4..2dd0634e3 100644 --- a/src/lib/QtGui/QWindow.ts +++ b/src/lib/QtGui/QWindow.ts @@ -69,6 +69,7 @@ export class QWindow extends QObject { return this.native.setVisibility(visibility); } } +wrapperCache.registerWrapper('QWindowWrap', QWindow); export interface QWindowSignals extends QObjectSignals { screenChanged: (screen: QScreen) => void; diff --git a/src/lib/QtWidgets/QAbstractItemView.ts b/src/lib/QtWidgets/QAbstractItemView.ts index a7f0d482e..472163564 100644 --- a/src/lib/QtWidgets/QAbstractItemView.ts +++ b/src/lib/QtWidgets/QAbstractItemView.ts @@ -8,6 +8,7 @@ import { QAbstractItemModel } from '../QtCore/QAbstractItemModel'; import { QPoint } from '../QtCore/QPoint'; import { QItemSelectionModel } from '../QtCore/QItemSelectionModel'; import { NativeElement } from '../core/Component'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -63,7 +64,7 @@ export abstract class QAbstractItemView { constructor(); constructor(native: NativeElement); - constructor(parent: QWidget); - constructor(arg?: NativeElement | QWidget) { + constructor(parent: QObject); + constructor(arg?: NativeElement | QObject) { let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; } else if (arg) { - const parent = arg as QWidget; + const parent = arg as QObject; native = new addon.QAction(parent.native); } else { native = new addon.QAction(); @@ -96,6 +95,7 @@ export class QAction extends QObject { return new QVariant(this.native.data()); } } +wrapperCache.registerWrapper('QActionWrap', QAction); export interface QActionSignals extends QObjectSignals { triggered: (checked: boolean) => void; diff --git a/src/lib/QtWidgets/QButtonGroup.ts b/src/lib/QtWidgets/QButtonGroup.ts index c18cd8e9d..3fbecdafb 100644 --- a/src/lib/QtWidgets/QButtonGroup.ts +++ b/src/lib/QtWidgets/QButtonGroup.ts @@ -1,5 +1,5 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement, NativeRawPointer } from '../core/Component'; import { QObject, QObjectSignals } from '../QtCore/QObject'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; @@ -11,11 +11,11 @@ export interface QButtonGroupSignals extends QObjectSignals { } export class QButtonGroup extends QObject { - constructor(arg?: NativeElement | QWidget) { - let native; + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (arg) { + } else if (arg != null) { const parent = arg as QWidget; native = new addon.QButtonGroup(parent.native); } else { diff --git a/src/lib/QtWidgets/QCalendarWidget.ts b/src/lib/QtWidgets/QCalendarWidget.ts index b3cd0154d..1b3430147 100644 --- a/src/lib/QtWidgets/QCalendarWidget.ts +++ b/src/lib/QtWidgets/QCalendarWidget.ts @@ -24,11 +24,11 @@ const calendarWidget = new QCalendarWidget(); ``` */ export class QCalendarWidget extends QWidget { - constructor(arg?: NativeElement | QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (arg as QWidget) { + } else if (arg != null) { const parent = arg as QWidget; native = new addon.QCalendarWidget(parent.native); } else { diff --git a/src/lib/QtWidgets/QCheckBox.ts b/src/lib/QtWidgets/QCheckBox.ts index eeddd433c..4d24bc1fd 100644 --- a/src/lib/QtWidgets/QCheckBox.ts +++ b/src/lib/QtWidgets/QCheckBox.ts @@ -1,8 +1,8 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; -import { NativeElement, NativeRawPointer } from '../core/Component'; +import { QWidget, QWidgetSignals } from './QWidget'; +import { NativeElement } from '../core/Component'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; -import { checkIfNativeElement, checkIfNapiExternal } from '../utils/helpers'; +import { checkIfNativeElement } from '../utils/helpers'; import { CheckState } from '../QtEnums'; import { wrapperCache } from '../core/WrapperCache'; @@ -24,23 +24,19 @@ checkbox.setText("Hello"); ``` */ export class QCheckBox extends QAbstractButton { - constructor(); - constructor(parent: QWidget); - constructor(rawPointer: NativeRawPointer); - constructor(arg?: QWidget | NativeRawPointer | NativeElement) { - let native; + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (checkIfNapiExternal(arg)) { - native = new addon.QCheckBox(arg); - } else if (arg) { - const parentWidget = arg as QWidget; - native = new addon.QCheckBox(parentWidget.native); + } else if (arg != null) { + const parent = arg as QWidget; + native = new addon.QCheckBox(parent.native); } else { native = new addon.QCheckBox(); } super(native); } + setTristate(y = true): void { this.setProperty('tristate', y); } diff --git a/src/lib/QtWidgets/QColorDialog.ts b/src/lib/QtWidgets/QColorDialog.ts index 8699f5843..5656810ef 100644 --- a/src/lib/QtWidgets/QColorDialog.ts +++ b/src/lib/QtWidgets/QColorDialog.ts @@ -1,8 +1,10 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QDialog, QDialogSignals } from './QDialog'; import { QColor } from '../QtGui/QColor'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -27,15 +29,19 @@ console.log(color.red(), color.green(), color.blue()); ``` */ export class QColorDialog extends QDialog { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QColorDialog(parent.native); } else { native = new addon.QColorDialog(); } super(native); } + setCurrentColor(color: QColor): void { this.setProperty('currentColor', color.native); } @@ -84,3 +90,5 @@ export interface QColorDialogSignals extends QDialogSignals { colorSelected: (color: QColor) => void; currentColorChanged: (color: QColor) => void; } + +wrapperCache.registerWrapper('QColorDialogWrap', QColorDialog); diff --git a/src/lib/QtWidgets/QComboBox.ts b/src/lib/QtWidgets/QComboBox.ts index 19b00ba06..17f4ccadd 100644 --- a/src/lib/QtWidgets/QComboBox.ts +++ b/src/lib/QtWidgets/QComboBox.ts @@ -7,6 +7,8 @@ import { QVariant } from '../QtCore/QVariant'; import { QStandardItemModel } from './QStandardItemModel'; import { QSize } from '../QtCore/QSize'; import { QModelIndex } from '../QtCore/QModelIndex'; +import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -37,9 +39,12 @@ comboBox.addEventListener('currentIndexChanged', (index) => { ``` */ export class QComboBox extends QWidget { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QComboBox(parent.native); } else { native = new addon.QComboBox(); @@ -221,3 +226,5 @@ export interface QComboBoxSignals extends QWidgetSignals { textActivated: (text: string) => void; textHighlighted: (text: string) => void; } + +wrapperCache.registerWrapper('QComboBoxWrap', QComboBox); diff --git a/src/lib/QtWidgets/QDateEdit.ts b/src/lib/QtWidgets/QDateEdit.ts index d1f9a9530..6b58cd75c 100644 --- a/src/lib/QtWidgets/QDateEdit.ts +++ b/src/lib/QtWidgets/QDateEdit.ts @@ -1,7 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QDateTimeEdit } from './QDateTimeEdit'; +import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -21,9 +23,12 @@ const dateEdit = new QDateEdit(); ``` */ export class QDateEdit extends QDateTimeEdit { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QDateEdit(parent.native); } else { native = new addon.QDateEdit(); @@ -31,3 +36,4 @@ export class QDateEdit extends QDateTimeEdit { super(native); } } +wrapperCache.registerWrapper('QDateEditWrap', QDateEdit); diff --git a/src/lib/QtWidgets/QDateTimeEdit.ts b/src/lib/QtWidgets/QDateTimeEdit.ts index 140569098..bcd46c17f 100644 --- a/src/lib/QtWidgets/QDateTimeEdit.ts +++ b/src/lib/QtWidgets/QDateTimeEdit.ts @@ -1,5 +1,5 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QAbstractSpinBox, QAbstractSpinBoxSignals } from './QAbstractSpinBox'; import { QCalendarWidget } from './QCalendarWidget'; import { QDate } from '../QtCore/QDate'; @@ -8,6 +8,7 @@ import { QTime } from '../QtCore/QTime'; import { TimeSpec } from '../QtEnums'; import { NativeElement } from '../core/Component'; import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -33,13 +34,11 @@ dateTimeEdit.setTime(time); ``` */ export class QDateTimeEdit extends QAbstractSpinBox { - calendar?: QCalendarWidget; - - constructor(arg?: QWidget | NativeElement) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (arg) { + } else if (arg != null) { const parent = arg as QWidget; native = new addon.QDateTimeEdit(parent.native); } else { @@ -47,17 +46,11 @@ export class QDateTimeEdit extends QAbstractSpinBox { } super(native); } - setCalendarWidget(calendarWidget: QCalendarWidget): void { - this.calendar = calendarWidget; this.native.setCalendarWidget(calendarWidget.native); } calendarWidget(): QCalendarWidget | null { - const calendar = this.calendar; - if (calendar) { - return calendar; - } - return null; + return wrapperCache.getWrapper(this.native.calendarWidget()) as QCalendarWidget; } setCalendarPopup(enable: boolean): void { this.setProperty('calendarPopup', enable); @@ -99,6 +92,7 @@ export class QDateTimeEdit extends QAbstractSpinBox { return this.property('timeSpec').toInt(); } } +wrapperCache.registerWrapper('QDateTimeEditWrap', QDateTimeEdit); export interface QDateTimeEditSignals extends QAbstractSpinBoxSignals { dateChanged: (date: QDate) => void; diff --git a/src/lib/QtWidgets/QDial.ts b/src/lib/QtWidgets/QDial.ts index 8982bc018..c7ef89654 100644 --- a/src/lib/QtWidgets/QDial.ts +++ b/src/lib/QtWidgets/QDial.ts @@ -1,7 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractSlider, QAbstractSliderSignals } from './QAbstractSlider'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -20,11 +22,12 @@ const dial = new QDial(); ``` */ export class QDial extends QAbstractSlider { - constructor(); - constructor(parent: QWidget); - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QDial(parent.native); } else { native = new addon.QDial(); @@ -53,5 +56,6 @@ export class QDial extends QAbstractSlider { return this.property('wrapping').toBool(); } } +wrapperCache.registerWrapper('QDialWrap', QDial); export type QDialSignals = QAbstractSliderSignals; diff --git a/src/lib/QtWidgets/QDialog.ts b/src/lib/QtWidgets/QDialog.ts index 26e22bd49..f0f93639b 100644 --- a/src/lib/QtWidgets/QDialog.ts +++ b/src/lib/QtWidgets/QDialog.ts @@ -4,6 +4,7 @@ import { NativeElement } from '../core/Component'; import { checkIfNativeElement } from '../utils/helpers'; import { QWidget, QWidgetSignals } from './QWidget'; import { DialogCode } from '../QtEnums'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -14,13 +15,12 @@ import { DialogCode } from '../QtEnums'; It is inherited by QFileDialog and QMessageBox (n/a QColorDialog, QErrorMessage, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, and QWizard) */ export class QDialog extends QWidget { - constructor(arg?: QDialog | NativeElement) { - let native; - let parent; + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (arg as QDialog) { - parent = arg as QDialog; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QDialog(parent.native); } else { native = new addon.QDialog(); @@ -53,6 +53,7 @@ export class QDialog extends QW this.native.reject(); } } +wrapperCache.registerWrapper('QDialogWrap', QDialog); export interface QDialogSignals extends QWidgetSignals { accepted: () => void; diff --git a/src/lib/QtWidgets/QDoubleSpinBox.ts b/src/lib/QtWidgets/QDoubleSpinBox.ts index 8e1fe54f9..8cbc73e03 100644 --- a/src/lib/QtWidgets/QDoubleSpinBox.ts +++ b/src/lib/QtWidgets/QDoubleSpinBox.ts @@ -1,7 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractSpinBox, QAbstractSpinBoxSignals, StepType } from './QAbstractSpinBox'; +import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -20,9 +22,12 @@ const doublespinBox = new QDoubleSpinBox(); ``` */ export class QDoubleSpinBox extends QAbstractSpinBox { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QDoubleSpinBox(parent.native); } else { native = new addon.QDoubleSpinBox(); @@ -90,6 +95,7 @@ export class QDoubleSpinBox extends QAbstractSpinBox { return this.native.valueFromText(text); } } +wrapperCache.registerWrapper('QDoubleSpinBoxWrap', QDoubleSpinBox); export interface QDoubleSpinBoxSignals extends QAbstractSpinBoxSignals { valueChanged: (value: number) => void; diff --git a/src/lib/QtWidgets/QErrorMessage.ts b/src/lib/QtWidgets/QErrorMessage.ts index 03fee08b6..b6188b803 100644 --- a/src/lib/QtWidgets/QErrorMessage.ts +++ b/src/lib/QtWidgets/QErrorMessage.ts @@ -1,7 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QDialog, QDialogSignals } from './QDialog'; +import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -21,9 +23,12 @@ const errorMessage = new QErrorMessage(); ``` */ export class QErrorMessage extends QDialog { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QErrorMessage(parent.native); } else { native = new addon.QErrorMessage(); @@ -34,5 +39,6 @@ export class QErrorMessage extends QDialog { this.native.showMessage(message); } } +wrapperCache.registerWrapper('QErrorMessageWrap', QErrorMessage); export type QErrorMessageSignals = QDialogSignals; diff --git a/src/lib/QtWidgets/QFileDialog.ts b/src/lib/QtWidgets/QFileDialog.ts index a5b0c55f4..d79ef7724 100644 --- a/src/lib/QtWidgets/QFileDialog.ts +++ b/src/lib/QtWidgets/QFileDialog.ts @@ -3,6 +3,8 @@ import { QWidget } from './QWidget'; import { NativeElement } from '../core/Component'; import { AcceptMode, DialogLabel, FileMode, Option, ViewMode } from '../QtEnums'; import { QDialog, QDialogSignals } from './QDialog'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -30,10 +32,12 @@ console.log(selectedFiles); export class QFileDialog extends QDialog { constructor(); constructor(parent: QWidget, caption?: string, directory?: string, filter?: string); - constructor(parent?: QWidget, caption = 'Select File', directory = '', filter = '') { + constructor(arg?: QWidget, caption = 'Select File', directory = '', filter = '') { let native: NativeElement; - if (parent) { - native = new addon.QFileDialog(parent.native, caption, directory, filter); + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + native = new addon.QFileDialog(arg.native, caption, directory, filter); } else { native = new addon.QFileDialog(); } @@ -88,6 +92,7 @@ export class QFileDialog extends QDialog { this.setProperty('options', options); } } +wrapperCache.registerWrapper('QFileDialogWrap', QFileDialog); export interface QFileDialogSignals extends QDialogSignals { currentChanged: (path: string) => void; diff --git a/src/lib/QtWidgets/QFontDialog.ts b/src/lib/QtWidgets/QFontDialog.ts index 41b9f1857..ccf22b759 100644 --- a/src/lib/QtWidgets/QFontDialog.ts +++ b/src/lib/QtWidgets/QFontDialog.ts @@ -1,8 +1,10 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QDialog, QDialogSignals } from './QDialog'; import { QFont } from '../QtGui/QFont'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -25,9 +27,12 @@ console.log(font); ``` */ export class QFontDialog extends QDialog { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QFontDialog(parent.native); } else { native = new addon.QFontDialog(); @@ -56,6 +61,7 @@ export class QFontDialog extends QDialog { return this.native.testOption(option); } } +wrapperCache.registerWrapper('QFontDialogWrap', QFontDialog); export enum FontDialogOption { NoButtons = 0x00000001, diff --git a/src/lib/QtWidgets/QFrame.ts b/src/lib/QtWidgets/QFrame.ts index aabdaaace..13d0f25c9 100644 --- a/src/lib/QtWidgets/QFrame.ts +++ b/src/lib/QtWidgets/QFrame.ts @@ -3,6 +3,7 @@ import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { checkIfNativeElement } from '../utils/helpers'; import { QRect } from '../QtCore/QRect'; +import { wrapperCache } from '../core/WrapperCache'; /** > Create and control frame. @@ -20,20 +21,18 @@ const frame = new QFrame(); ``` */ export class QFrame extends QWidget { - constructor(arg?: QWidget | NativeElement) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - let parent; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (arg as QWidget) { - parent = arg as QWidget; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QFrame(parent.native); } else { native = new addon.QFrame(); } super(native); } - setFrameRect(r: QRect): void { this.setProperty('frameRect', r.native); } @@ -74,6 +73,7 @@ export class QFrame extends QWidg return this.native.frameStyle(); } } +wrapperCache.registerWrapper('QFrameWrap', QFrame); export enum Shadow { Plain = 0x0010, diff --git a/src/lib/QtWidgets/QGraphicsBlurEffect.ts b/src/lib/QtWidgets/QGraphicsBlurEffect.ts index ce2bacf7e..e7b70e2d4 100644 --- a/src/lib/QtWidgets/QGraphicsBlurEffect.ts +++ b/src/lib/QtWidgets/QGraphicsBlurEffect.ts @@ -3,9 +3,10 @@ import { NativeElement } from '../core/Component'; import { checkIfNativeElement } from '../utils/helpers'; import { QObject } from '../QtCore/QObject'; import { QGraphicsEffect, QGraphicsEffectSignals } from './QGraphicsEffect'; +import { wrapperCache } from '../core/WrapperCache'; /** - + > The QGraphicsBlurEffect class provides a blur effect. * **This class is a JS wrapper around Qt's [QGraphicsBlurEffect class](https://doc.qt.io/qt-5/qgraphicsblureffect.html)** @@ -22,17 +23,13 @@ blur.setBlurRadius(8); ``` */ export class QGraphicsBlurEffect extends QGraphicsEffect { - constructor(); - constructor(native: NativeElement); - constructor(parent: QObject); - constructor(arg?: QObject | NativeElement) { + constructor(arg?: QObject | NativeElement) { let native: NativeElement; - if (arg) { - if (checkIfNativeElement(arg)) { - native = arg as NativeElement; - } else { - native = new addon.QGraphicsBlurEffect(arg.native); - } + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QObject; + native = new addon.QGraphicsBlurEffect(parent.native); } else { native = new addon.QGraphicsBlurEffect(); } @@ -51,6 +48,7 @@ export class QGraphicsBlurEffect extends QGraphicsEffect The QGraphicsDropShadowEffect class provides a drop shadow effect. * **This class is a JS wrapper around Qt's [QGraphicsDropShadowEffect class](https://doc.qt.io/qt-5/qgraphicsdropshadoweffect.html)** -A drop shadow effect renders the source with a drop shadow. +A drop shadow effect renders the source with a drop shadow. ### Example @@ -23,17 +24,13 @@ shadow.setBlurRadius(8); ``` */ export class QGraphicsDropShadowEffect extends QGraphicsEffect { - constructor(); - constructor(native: NativeElement); - constructor(parent: QObject); - constructor(arg?: QObject | NativeElement) { + constructor(arg?: QObject | NativeElement) { let native: NativeElement; - if (arg) { - if (checkIfNativeElement(arg)) { - native = arg as NativeElement; - } else { - native = new addon.QGraphicsDropShadowEffect(arg.native); - } + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QObject; + native = new addon.QGraphicsDropShadowEffect(parent.native); } else { native = new addon.QGraphicsDropShadowEffect(); } @@ -64,6 +61,7 @@ export class QGraphicsDropShadowEffect extends QGraphicsEffect void; diff --git a/src/lib/QtWidgets/QGridLayout.ts b/src/lib/QtWidgets/QGridLayout.ts index 89485aed6..ae054ffff 100644 --- a/src/lib/QtWidgets/QGridLayout.ts +++ b/src/lib/QtWidgets/QGridLayout.ts @@ -1,8 +1,10 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QLayout, QLayoutSignals } from './QLayout'; import { NativeElement } from '../core/Component'; import { AlignmentFlag } from '../QtEnums'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -30,16 +32,18 @@ layout.addWidget(label2); */ export class QGridLayout extends QLayout { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QGridLayout(parent.native); } else { native = new addon.QGridLayout(); } super(native); } - addLayout( layout: QLayout, row: number, @@ -100,5 +104,6 @@ export class QGridLayout extends QLayout { return this.native.rowCount(); } } +wrapperCache.registerWrapper('QGridLayoutWrap', QGridLayout); export type QGridLayoutSignals = QLayoutSignals; diff --git a/src/lib/QtWidgets/QGroupBox.ts b/src/lib/QtWidgets/QGroupBox.ts index 98e613f0a..b6bb1caa1 100644 --- a/src/lib/QtWidgets/QGroupBox.ts +++ b/src/lib/QtWidgets/QGroupBox.ts @@ -2,6 +2,8 @@ import addon from '../utils/addon'; import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { AlignmentFlag } from '../QtEnums/AlignmentFlag'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -40,15 +42,19 @@ win.show(); ``` */ export class QGroupBox extends QWidget { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QGroupBox(parent.native); } else { native = new addon.QGroupBox(); } super(native); } + setAlignment(alignment: AlignmentFlag): void { this.setProperty('alignment', alignment); } @@ -80,6 +86,7 @@ export class QGroupBox extends QWidget { return this.property('title').toString(); } } +wrapperCache.registerWrapper('QGroupBoxWrap', QGroupBox); export interface QGroupBoxSignals extends QWidgetSignals { clicked: (checked: boolean) => void; diff --git a/src/lib/QtWidgets/QHeaderView.ts b/src/lib/QtWidgets/QHeaderView.ts index 1ae937c71..9c646b023 100644 --- a/src/lib/QtWidgets/QHeaderView.ts +++ b/src/lib/QtWidgets/QHeaderView.ts @@ -3,6 +3,7 @@ import { QWidget } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractItemView, QAbstractItemViewSignals } from './QAbstractItemView'; import { AlignmentFlag, checkIfNativeElement, Orientation, QPoint, SortOrder } from '../..'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -217,6 +218,7 @@ export class QHeaderView { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QInputDialog(parent.native); } else { native = new addon.QInputDialog(); @@ -134,6 +140,7 @@ export class QInputDialog extends QDialog { this.native.setTextValue(value); } } +wrapperCache.registerWrapper('QInputDialogWrap', QInputDialog); export interface QInputDialogSignals extends QDialogSignals { doubleValueChanged: (value: number) => void; diff --git a/src/lib/QtWidgets/QLCDNumber.ts b/src/lib/QtWidgets/QLCDNumber.ts index 53c1d6475..0da1494b4 100644 --- a/src/lib/QtWidgets/QLCDNumber.ts +++ b/src/lib/QtWidgets/QLCDNumber.ts @@ -1,4 +1,7 @@ +import { NativeElement } from '../core/Component'; +import { wrapperCache } from '../core/WrapperCache'; import addon from '../utils/addon'; +import { checkIfNativeElement } from '../utils/helpers'; import { QWidget, QWidgetSignals } from './QWidget'; /** @@ -20,9 +23,12 @@ const lcd = new QLCDNumber(); */ export class QLCDNumber extends QWidget { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QLCDNumber(parent.native); } else { native = new addon.QLCDNumber(); @@ -78,6 +84,7 @@ export class QLCDNumber extends QWidget { this.native.setOctMode(); } } +wrapperCache.registerWrapper('QLCDNumberWrap', QLCDNumber); export enum Mode { Hex, diff --git a/src/lib/QtWidgets/QLabel.ts b/src/lib/QtWidgets/QLabel.ts index 0afcd2c86..ebeb608f5 100644 --- a/src/lib/QtWidgets/QLabel.ts +++ b/src/lib/QtWidgets/QLabel.ts @@ -1,5 +1,5 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QFrame, QFrameSignals } from './QFrame'; import { QPixmap } from '../QtGui/QPixmap'; import { QMovie } from '../QtGui/QMovie'; @@ -7,6 +7,9 @@ import { AlignmentFlag } from '../QtEnums/AlignmentFlag'; import { TextFormat } from '../QtEnums/TextFormat'; import { TextInteractionFlag } from '../QtEnums'; import { QPicture } from '../QtGui/QPicture'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -31,10 +34,13 @@ export class QLabel extends QFrame { private _pixmap?: QPixmap; private _movie?: QMovie; private _buddy?: QWidget | null; - - constructor(parent?: QWidget) { - let native; - if (parent) { + // TODO + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QLabel(parent.native); } else { native = new addon.QLabel(); @@ -148,6 +154,7 @@ export class QLabel extends QFrame { this.native.clear(); } } +wrapperCache.registerWrapper('QLabelWrap', QLabel); export interface QLabelSignals extends QFrameSignals { linkActivated: (link: string) => void; diff --git a/src/lib/QtWidgets/QLineEdit.ts b/src/lib/QtWidgets/QLineEdit.ts index 3ad55ee80..5a11e97d1 100644 --- a/src/lib/QtWidgets/QLineEdit.ts +++ b/src/lib/QtWidgets/QLineEdit.ts @@ -3,6 +3,9 @@ import { QWidget, QWidgetSignals } from './QWidget'; import { AlignmentFlag } from '../QtEnums/AlignmentFlag'; import { CursorMoveStyle } from '../QtEnums/CursorMoveStyle'; import { QPoint } from '../QtCore/QPoint'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -22,9 +25,12 @@ const lineEdit = new QLineEdit(); */ export class QLineEdit extends QWidget { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QLineEdit(parent.native); } else { native = new addon.QLineEdit(); @@ -208,6 +214,7 @@ export class QLineEdit extends QWidget { this.native.undo(); } } +wrapperCache.registerWrapper('QLineEditWrap', QLineEdit); export enum EchoMode { Normal, diff --git a/src/lib/QtWidgets/QListView.ts b/src/lib/QtWidgets/QListView.ts index 1e0c26873..7e7ccb697 100644 --- a/src/lib/QtWidgets/QListView.ts +++ b/src/lib/QtWidgets/QListView.ts @@ -1,10 +1,11 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractItemView, QAbstractItemViewSignals } from './QAbstractItemView'; import { QSize } from '../QtCore/QSize'; import { AlignmentFlag } from '../..'; import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -22,7 +23,7 @@ const listview = new QListView(); ``` */ export class QListView extends QAbstractItemView { - constructor(arg?: QWidget | NativeElement) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; @@ -129,6 +130,7 @@ export class QListView exte return this.native.isRowHidden(row); } } +wrapperCache.registerWrapper('QListViewWrap', QListView); export enum Flow { LeftToRight, diff --git a/src/lib/QtWidgets/QListWidget.ts b/src/lib/QtWidgets/QListWidget.ts index c7d1d0c88..b2e1619bc 100644 --- a/src/lib/QtWidgets/QListWidget.ts +++ b/src/lib/QtWidgets/QListWidget.ts @@ -1,11 +1,13 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement, Component } from '../core/Component'; import { QListWidgetItem } from './QListWidgetItem'; import { QListView, QListViewSignals } from './QListView'; import { QRect } from '../QtCore/QRect'; import { SortOrder, ScrollHint, MatchFlag } from '../QtEnums'; import { QModelIndex } from '../QtCore/QModelIndex'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -33,11 +35,14 @@ for (let i = 0; i < 30; i++) { ``` */ export class QListWidget extends QListView { - items: Set; + items: Set; - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QListWidget(parent.native); } else { native = new addon.QListWidget(); @@ -150,6 +155,7 @@ export class QListWidget extends QListView { this.native.scrollToItem(item.native, hint); } } +wrapperCache.registerWrapper('QListWidgetWrap', QListWidget); export interface QListWidgetSignals extends QListViewSignals { currentItemChanged: (current: QListWidgetItem, previous: QListWidgetItem) => void; diff --git a/src/lib/QtWidgets/QMainWindow.ts b/src/lib/QtWidgets/QMainWindow.ts index 90b2710d7..8cd3abce1 100644 --- a/src/lib/QtWidgets/QMainWindow.ts +++ b/src/lib/QtWidgets/QMainWindow.ts @@ -35,7 +35,7 @@ export class QMainWindow extends QWidget { public centralWidget?: QWidget | null; private _menuBar?: QMenuBar; private _statusBar?: QStatusBar | null; - + // TODO constructor(parent?: QWidget) { let native: NativeElement; if (parent) { diff --git a/src/lib/QtWidgets/QMenu.ts b/src/lib/QtWidgets/QMenu.ts index e5f59ae8b..ca8f639b6 100644 --- a/src/lib/QtWidgets/QMenu.ts +++ b/src/lib/QtWidgets/QMenu.ts @@ -3,6 +3,8 @@ import { QWidget, QWidgetSignals } from './QWidget'; import addon from '../utils/addon'; import { QAction } from './QAction'; import { QPoint } from '../QtCore/QPoint'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -19,9 +21,12 @@ const menu = new QMenu(); ``` */ export class QMenu extends QWidget { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QMenu(parent.native); } else { native = new addon.QMenu(); @@ -50,6 +55,7 @@ export class QMenu extends QWidget { this.native.popup(point.native, action?.native); } } +wrapperCache.registerWrapper('QMenuWrap', QMenu); export interface QMenuSignals extends QWidgetSignals { triggered: (action: NativeElement) => void; diff --git a/src/lib/QtWidgets/QMenuBar.ts b/src/lib/QtWidgets/QMenuBar.ts index 01a2f8ffc..8491ce771 100644 --- a/src/lib/QtWidgets/QMenuBar.ts +++ b/src/lib/QtWidgets/QMenuBar.ts @@ -4,6 +4,7 @@ import { QWidget, QWidgetSignals } from './QWidget'; import addon from '../utils/addon'; import { checkIfNativeElement } from '../utils/helpers'; import { QAction } from './QAction'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -24,30 +25,27 @@ global.win = win; ``` */ export class QMenuBar extends QWidget { - _menus: Set; - - constructor(arg?: QWidget | NativeElement) { - let native; + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (typeof arg === 'object') { - native = new addon.QMenuBar(arg.native); + } else if (arg != null) { + const parent = arg as QWidget; + native = new addon.QMenuBar(parent.native); } else { native = new addon.QMenuBar(); } super(native); - this._menus = new Set(); } + addMenu(menu: QMenu | string): QMenu { if (typeof menu === 'string') { const qmenu = new QMenu(); qmenu.setTitle(menu); this.native.addMenu(qmenu.native); - this._menus.add(qmenu); return qmenu; } this.native.addMenu(menu.native); - this._menus.add(menu); return menu; } addSeparator(): QAction { @@ -57,5 +55,6 @@ export class QMenuBar extends QWidget { this.native.setNativeMenuBar(nativeMenuBar); } } +wrapperCache.registerWrapper('QMenuBarWrap', QMenuBar); export type QMenuBarSignals = QWidgetSignals; diff --git a/src/lib/QtWidgets/QMessageBox.ts b/src/lib/QtWidgets/QMessageBox.ts index c120b7be6..8a69ef93a 100644 --- a/src/lib/QtWidgets/QMessageBox.ts +++ b/src/lib/QtWidgets/QMessageBox.ts @@ -1,9 +1,11 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; -import { NativeRawPointer } from '../core/Component'; +import { QWidget, QWidgetSignals } from './QWidget'; +import { NativeElement, NativeRawPointer } from '../core/Component'; import { QDialog, QDialogSignals } from './QDialog'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; import { QPushButton } from './QPushButton'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; export enum ButtonRole { InvalidRole, @@ -40,9 +42,12 @@ messageBox.exec(); ``` */ export class QMessageBox extends QDialog { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QMessageBox(parent.native); } else { native = new addon.QMessageBox(); @@ -91,6 +96,7 @@ export class QMessageBox extends QDialog { addon.QMessageBox.aboutQt(parent.native, title); } } +wrapperCache.registerWrapper('QMessageBoxWrap', QMessageBox); export interface QMessageBoxSignals extends QDialogSignals { buttonClicked: (buttonRawPointer: NativeRawPointer<'QAbstractButton*'>) => void; diff --git a/src/lib/QtWidgets/QPlainTextEdit.ts b/src/lib/QtWidgets/QPlainTextEdit.ts index f1daa7b60..191c568db 100644 --- a/src/lib/QtWidgets/QPlainTextEdit.ts +++ b/src/lib/QtWidgets/QPlainTextEdit.ts @@ -1,8 +1,10 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractScrollArea, QAbstractScrollAreaSignals } from './QAbstractScrollArea'; import { QTextOptionWrapMode } from '../QtGui/QTextOption'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; export interface QPlainTextEditSignals extends QAbstractScrollAreaSignals { textChanged: () => void; @@ -32,10 +34,12 @@ const plainTextEdit = new QPlainTextEdit(); ``` */ export class QPlainTextEdit extends QAbstractScrollArea { - placeholderText?: string; - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QPlainTextEdit(parent.native); } else { native = new addon.QPlainTextEdit(); @@ -48,7 +52,6 @@ export class QPlainTextEdit extends QAbstractScrollArea { } setPlaceholderText(text: string): void { // react:✓, //TODO:getter - this.placeholderText = text; this.native.setPlaceholderText(text); } toPlainText(): string { @@ -79,6 +82,7 @@ export class QPlainTextEdit extends QAbstractScrollArea { this.native.insertPlainText(`${text}`); } } +wrapperCache.registerWrapper('QPlainTextEditWrap', QPlainTextEdit); export enum LineWrapMode { NoWrap, diff --git a/src/lib/QtWidgets/QProgressBar.ts b/src/lib/QtWidgets/QProgressBar.ts index 5b6a91012..c893ce35f 100644 --- a/src/lib/QtWidgets/QProgressBar.ts +++ b/src/lib/QtWidgets/QProgressBar.ts @@ -2,6 +2,8 @@ import addon from '../utils/addon'; import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { Orientation, AlignmentFlag } from '../QtEnums'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -20,9 +22,12 @@ const progressBar = new QProgressBar(); ``` */ export class QProgressBar extends QWidget { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QProgressBar(parent.native); } else { native = new addon.QProgressBar(); @@ -96,6 +101,7 @@ export class QProgressBar extends QWidget { this.native.setRange(minimum, maximum); } } +wrapperCache.registerWrapper('QProgressBarWrap', QProgressBar); export enum QProgressBarDirection { TopToBottom, diff --git a/src/lib/QtWidgets/QProgressDialog.ts b/src/lib/QtWidgets/QProgressDialog.ts index 5226948e3..baed5ef64 100644 --- a/src/lib/QtWidgets/QProgressDialog.ts +++ b/src/lib/QtWidgets/QProgressDialog.ts @@ -1,6 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QDialog, QDialogSignals } from './QDialog'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -20,9 +23,12 @@ const progressDialog = new QProgressDialog(); ``` */ export class QProgressDialog extends QDialog { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QProgressDialog(parent.native); } else { native = new addon.QProgressDialog(); @@ -87,6 +93,7 @@ export class QProgressDialog extends QDialog { this.native.setRange(minimum, maximum); } } +wrapperCache.registerWrapper('QProgressDialogWrap', QProgressDialog); export interface QProgressDialogSignals extends QDialogSignals { canceled: () => void; diff --git a/src/lib/QtWidgets/QPushButton.ts b/src/lib/QtWidgets/QPushButton.ts index c13aa042c..35413003b 100644 --- a/src/lib/QtWidgets/QPushButton.ts +++ b/src/lib/QtWidgets/QPushButton.ts @@ -1,9 +1,10 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; -import { NativeElement, NativeRawPointer } from '../core/Component'; +import { QWidget, QWidgetSignals } from './QWidget'; +import { NativeElement } from '../core/Component'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; -import { checkIfNativeElement, checkIfNapiExternal } from '../utils/helpers'; +import { checkIfNativeElement } from '../utils/helpers'; import { QMenu } from './QMenu'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -23,17 +24,13 @@ button.setText("Hello"); ``` */ export class QPushButton extends QAbstractButton { - private _menu?: QMenu | null; - - constructor(arg?: QWidget | NativeRawPointer | NativeElement, disableNativeDeletion = true) { - let native; + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (checkIfNapiExternal(arg)) { - native = new addon.QPushButton(arg, disableNativeDeletion); - } else if (arg) { - const parentWidget = arg as QWidget; - native = new addon.QPushButton(parentWidget.native); + } else if (arg != null) { + const parent = arg as QWidget; + native = new addon.QPushButton(parent.native); } else { native = new addon.QPushButton(); } @@ -58,18 +55,15 @@ export class QPushButton extends QAbstractButton { return this.property('flat').toBool(); } setMenu(menu: QMenu): void { - this._menu = menu; this.native.setMenu(menu.native); } menu(): QMenu | null { - if (this._menu) { - return this._menu; - } - return null; + return wrapperCache.getWrapper(this.native.menu()) as QMenu; } showMenu(): void { this.native.showMenu(); } } +wrapperCache.registerWrapper('QPushButtonWrap', QPushButton); export type QPushButtonSignals = QAbstractButtonSignals; diff --git a/src/lib/QtWidgets/QRadioButton.ts b/src/lib/QtWidgets/QRadioButton.ts index f0ee99cf1..63c352954 100644 --- a/src/lib/QtWidgets/QRadioButton.ts +++ b/src/lib/QtWidgets/QRadioButton.ts @@ -1,8 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; -import { NativeElement, NativeRawPointer } from '../core/Component'; +import { QWidget, QWidgetSignals } from './QWidget'; +import { NativeElement } from '../core/Component'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; -import { checkIfNativeElement, checkIfNapiExternal } from '../utils/helpers'; +import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -23,20 +24,19 @@ radioButton.setText("Hello"); */ export class QRadioButton extends QAbstractButton { - constructor(arg?: QWidget | NativeRawPointer | NativeElement, disableNativeDeletion = true) { - let native; + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (checkIfNapiExternal(arg)) { - native = new addon.QRadioButton(arg, disableNativeDeletion); - } else if (arg) { - const parentWidget = arg as QWidget; - native = new addon.QRadioButton(parentWidget.native); + } else if (arg != null) { + const parent = arg as QWidget; + native = new addon.QRadioButton(parent.native); } else { native = new addon.QRadioButton(); } super(native); } } +wrapperCache.registerWrapper('QRadioButtonWrap', QRadioButton); export type QRadioButtonSignals = QAbstractButtonSignals; diff --git a/src/lib/QtWidgets/QScrollArea.ts b/src/lib/QtWidgets/QScrollArea.ts index 1dc6eb8db..f1153f22a 100644 --- a/src/lib/QtWidgets/QScrollArea.ts +++ b/src/lib/QtWidgets/QScrollArea.ts @@ -1,10 +1,11 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractScrollArea, QAbstractScrollAreaSignals } from './QAbstractScrollArea'; import { AlignmentFlag } from '../QtEnums'; import { Margins } from '../utils/Margins'; import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -30,9 +31,12 @@ scrollArea.setWidget(imageLabel); ``` */ export class QScrollArea extends QAbstractScrollArea { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QScrollArea(parent.native); } else { native = new addon.QScrollArea(); @@ -82,5 +86,6 @@ export class QScrollArea extends QAbstractScrollArea { }; } } +wrapperCache.registerWrapper('QScrollAreaWrap', QScrollArea); export type QScrollAreaSignals = QAbstractScrollAreaSignals; diff --git a/src/lib/QtWidgets/QScrollBar.ts b/src/lib/QtWidgets/QScrollBar.ts index e3557473b..d634f6686 100644 --- a/src/lib/QtWidgets/QScrollBar.ts +++ b/src/lib/QtWidgets/QScrollBar.ts @@ -1,7 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractSlider, QAbstractSliderSignals } from './QAbstractSlider'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -20,9 +22,12 @@ const scrollbar = new QScrollBar(); ``` */ export class QScrollBar extends QAbstractSlider { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QScrollBar(parent.native); } else { native = new addon.QScrollBar(); @@ -30,5 +35,6 @@ export class QScrollBar extends QAbstractSlider { super(native); } } +wrapperCache.registerWrapper('QScrollBarWrap', QScrollBar); export type QScrollBarSignals = QAbstractSliderSignals; diff --git a/src/lib/QtWidgets/QShortcut.ts b/src/lib/QtWidgets/QShortcut.ts index c1d9581c2..df285df23 100644 --- a/src/lib/QtWidgets/QShortcut.ts +++ b/src/lib/QtWidgets/QShortcut.ts @@ -1,8 +1,11 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QKeySequence } from '../QtGui/QKeySequence'; import { ShortcutContext } from '../QtEnums'; import { QObject, QObjectSignals } from '../QtCore/QObject'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -29,8 +32,17 @@ global.shortcut = shortcut; ``` */ export class QShortcut extends QObject { - constructor(parent: QWidget) { - super(new addon.QShortcut(parent.native)); + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; + native = new addon.QShortcut(parent.native); + } else { + native = new addon.QShortcut(); + } + super(native); } setEnabled(enabled: boolean): void { this.native.setEnabled(enabled); @@ -45,6 +57,7 @@ export class QShortcut extends QObject { this.native.setContext(shortcutContext); } } +wrapperCache.registerWrapper('QShortcutWrap', QShortcut); export interface QShortcutSignals extends QObjectSignals { activated: () => void; diff --git a/src/lib/QtWidgets/QSlider.ts b/src/lib/QtWidgets/QSlider.ts index bb3c4e170..e39431d14 100644 --- a/src/lib/QtWidgets/QSlider.ts +++ b/src/lib/QtWidgets/QSlider.ts @@ -1,7 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractSlider, QAbstractSliderSignals } from './QAbstractSlider'; +import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -20,9 +22,12 @@ const slider = new QSlider(); ``` */ export class QSlider extends QAbstractSlider { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QSlider(parent.native); } else { native = new addon.QSlider(); @@ -42,6 +47,7 @@ export class QSlider extends QAbstractSlider { return this.property('tickPosition').toInt(); } } +wrapperCache.registerWrapper('QSliderWrap', QSlider); export enum TickPosition { NoTicks, diff --git a/src/lib/QtWidgets/QSpinBox.ts b/src/lib/QtWidgets/QSpinBox.ts index 37b7462a9..d75c66a66 100644 --- a/src/lib/QtWidgets/QSpinBox.ts +++ b/src/lib/QtWidgets/QSpinBox.ts @@ -1,6 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QAbstractSpinBox, QAbstractSpinBoxSignals, StepType } from './QAbstractSpinBox'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -19,9 +22,12 @@ const spinBox = new QSpinBox(); ``` */ export class QSpinBox extends QAbstractSpinBox { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QSpinBox(parent.native); } else { native = new addon.QSpinBox(); @@ -83,6 +89,7 @@ export class QSpinBox extends QAbstractSpinBox { this.native.setRange(minimum, maximum); } } +wrapperCache.registerWrapper('QSpinBoxWrap', QSpinBox); export interface QSpinBoxSignals extends QAbstractSpinBoxSignals { valueChanged: (value: number) => void; diff --git a/src/lib/QtWidgets/QSplitter.ts b/src/lib/QtWidgets/QSplitter.ts index 5218eb658..79eb6e410 100644 --- a/src/lib/QtWidgets/QSplitter.ts +++ b/src/lib/QtWidgets/QSplitter.ts @@ -1,8 +1,10 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QFrame, QFrameSignals } from './QFrame'; import { NativeElement } from '../core/Component'; import { Orientation } from '../QtEnums'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -35,9 +37,12 @@ splitterHorizontal.addWidget(right); */ export class QSplitter extends QFrame { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QSplitter(parent.native); } else { native = new addon.QSplitter(); @@ -72,6 +77,7 @@ export class QSplitter extends QFrame { this.native.setOrientation(orientation); } } +wrapperCache.registerWrapper('QSplitterWrap', QSplitter); export interface QSplitterSignals extends QFrameSignals { splitterMoved: (pos: number, index: number) => void; diff --git a/src/lib/QtWidgets/QStackedWidget.ts b/src/lib/QtWidgets/QStackedWidget.ts index 289d4feae..3fbbcdc35 100644 --- a/src/lib/QtWidgets/QStackedWidget.ts +++ b/src/lib/QtWidgets/QStackedWidget.ts @@ -1,6 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QFrame, QFrameSignals } from './QFrame'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -44,16 +47,18 @@ win.show(); ``` */ export class QStackedWidget extends QFrame { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QStackedWidget(parent.native); } else { native = new addon.QStackedWidget(); } super(native); } - // *** Public Function *** addWidget(widget: QWidget): void { this.native.addWidget(widget.native); @@ -81,6 +86,7 @@ export class QStackedWidget extends QFrame { this.native.setCurrentWidget(widget.native); } } +wrapperCache.registerWrapper('QStackedWidgetWrap', QStackedWidget); export interface QStackedWidgetSignals extends QFrameSignals { currentChanged: (index: number) => void; diff --git a/src/lib/QtWidgets/QStandardItemModel.ts b/src/lib/QtWidgets/QStandardItemModel.ts index f0ed26305..a5c0893e2 100644 --- a/src/lib/QtWidgets/QStandardItemModel.ts +++ b/src/lib/QtWidgets/QStandardItemModel.ts @@ -1,16 +1,21 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; import { QObject, QObjectSignals } from '../QtCore/QObject'; import { QStandardItem } from './QStandardItem'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; export interface QStandardItemModelSignals extends QObjectSignals { itemChanged: (item: QStandardItem) => void; } export class QStandardItemModel extends QObject { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QObject | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QObject; native = new addon.QStandardItemModel(parent.native); } else { native = new addon.QStandardItemModel(); @@ -26,3 +31,4 @@ export class QStandardItemModel extends QObject { } } } +wrapperCache.registerWrapper('QStandardItemModelWrap', QStandardItemModel); diff --git a/src/lib/QtWidgets/QStatusBar.ts b/src/lib/QtWidgets/QStatusBar.ts index 08cbe9f44..56a682aa9 100644 --- a/src/lib/QtWidgets/QStatusBar.ts +++ b/src/lib/QtWidgets/QStatusBar.ts @@ -1,6 +1,8 @@ import addon from '../utils/addon'; import { QWidgetSignals, QWidget } from './QWidget'; import { NativeElement } from '../core/Component'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; export interface QStatusBarSignals extends QWidgetSignals { messageChanged: (message: string) => void; @@ -23,23 +25,18 @@ const progressBar = new QStatusBar(); ``` */ export class QStatusBar extends QWidget { - permanentWidgets: Set; - widgets: Set; - - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QStatusBar(parent.native); } else { native = new addon.QStatusBar(); } - super(native); - - this.permanentWidgets = new Set(); - this.widgets = new Set(); } - /** * Adds the given widget permanently to this status bar, reparenting the widget if it isn't already a child of this QStatusBar object. The stretch parameter is used to compute a suitable size for the given widget as the status bar grows and shrinks. The default stretch factor is 0, i.e giving the widget a minimum of space. * Permanently means that the widget may not be obscured by temporary messages. It is is located at the far right of the status bar. @@ -48,10 +45,6 @@ export class QStatusBar extends QWidget { */ addPermanentWidget(widget: QWidget, stretch = 0): void { this.native.addPermanentWidget(widget.native, stretch); - - if (!this.permanentWidgets.has(widget.native)) { - this.permanentWidgets.add(widget.native); - } } /** @@ -62,10 +55,6 @@ export class QStatusBar extends QWidget { */ addWidget(widget: QWidget, stretch = 0): void { this.native.addWidget(widget.native, stretch); - - if (!this.widgets.has(widget.native)) { - this.widgets.add(widget.native); - } } /** @@ -91,12 +80,7 @@ export class QStatusBar extends QWidget { * @param stretch Used to compute a suitable size for the given widget as the status bar grows and shrinks. The default stretch factor is 0, i.e giving the widget a minimum of space. */ insertPermanentWidget(index: number, widget: QWidget, stretch = 0): number { - const insertionIndex = this.native.insertPermanentWidget(index, widget.native, stretch); - if (!this.permanentWidgets.has(widget.native)) { - this.permanentWidgets.add(widget.native); - } - - return insertionIndex; + return this.native.insertPermanentWidget(index, widget.native, stretch); } /** @@ -108,12 +92,7 @@ export class QStatusBar extends QWidget { * @param stretch Used to compute a suitable size for the given widget as the status bar grows and shrinks. The default stretch factor is 0, i.e giving the widget a minimum of space. */ insertWidget(index: number, widget: QWidget, stretch = 0): number { - const insertionIndex = this.native.insertWidget(index, widget.native, stretch); - if (!this.widgets.has(widget.native)) { - this.widgets.add(widget.native); - } - - return insertionIndex; + return this.native.insertWidget(index, widget.native, stretch); } /** @@ -130,8 +109,6 @@ export class QStatusBar extends QWidget { */ removeWidget(widget: QWidget): void { this.native.removeWidget(widget.native); - this.widgets.delete(widget.native); - this.permanentWidgets.delete(widget.native); } /** @@ -152,3 +129,4 @@ export class QStatusBar extends QWidget { this.native.setSizeGripEnabled(enabled); } } +wrapperCache.registerWrapper('QStatusBarWrap', QStatusBar); diff --git a/src/lib/QtWidgets/QSvgWidget.ts b/src/lib/QtWidgets/QSvgWidget.ts index fce3feb85..02adf2d8f 100644 --- a/src/lib/QtWidgets/QSvgWidget.ts +++ b/src/lib/QtWidgets/QSvgWidget.ts @@ -1,6 +1,8 @@ import addon from '../utils/addon'; import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -27,9 +29,12 @@ fs.readFile("icon.svg", (err, buffer) => { */ export class QSvgWidget extends QWidget { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QSvgWidget(parent.native); } else { native = new addon.QSvgWidget(); @@ -44,3 +49,4 @@ export class QSvgWidget extends QWidget { } } } +wrapperCache.registerWrapper('QSvgWidgetWrap', QSvgWidget); diff --git a/src/lib/QtWidgets/QSystemTrayIcon.ts b/src/lib/QtWidgets/QSystemTrayIcon.ts index 9d0d466b4..18bbbdbae 100644 --- a/src/lib/QtWidgets/QSystemTrayIcon.ts +++ b/src/lib/QtWidgets/QSystemTrayIcon.ts @@ -1,8 +1,11 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QIcon } from '../QtGui/QIcon'; import { QMenu } from './QMenu'; import { QObject, QObjectSignals } from '../QtCore/QObject'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -28,11 +31,12 @@ global.tray = tray; // prevents garbage collection of tray ``` */ export class QSystemTrayIcon extends QObject { - contextMenu?: QMenu; - - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QSystemTrayIcon(parent.native); } else { native = new addon.QSystemTrayIcon(); @@ -58,10 +62,10 @@ export class QSystemTrayIcon extends QObject { this.native.setToolTip(tooltip); } setContextMenu(menu: QMenu): void { - this.contextMenu = menu; - this.native.setContextMenu(this.contextMenu.native); + this.native.setContextMenu(menu.native); } } +wrapperCache.registerWrapper('QSystemTrayIconWrap', QSystemTrayIcon); export enum QSystemTrayIconActivationReason { Unknown = 0, diff --git a/src/lib/QtWidgets/QTabBar.ts b/src/lib/QtWidgets/QTabBar.ts index 004a8e16f..546886cd4 100644 --- a/src/lib/QtWidgets/QTabBar.ts +++ b/src/lib/QtWidgets/QTabBar.ts @@ -7,6 +7,9 @@ import { QVariant } from '../QtCore/QVariant'; import { QColor } from '../QtGui/QColor'; import { QPoint } from '../QtCore/QPoint'; import { QRect } from '../QtCore/QRect'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -26,9 +29,12 @@ const tabBar = new QTabBar(); ``` */ export class QTabBar extends QWidget { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QTabBar(parent.native); } else { native = new addon.QTabBar(); @@ -195,6 +201,7 @@ export class QTabBar extends QWidget { return new QRect(this.native.tabRect(index)); } } +wrapperCache.registerWrapper('QTabBarWrap', QTabBar); export enum ButtonPosition { LeftSide = 0, diff --git a/src/lib/QtWidgets/QTabWidget.ts b/src/lib/QtWidgets/QTabWidget.ts index 27869568d..e40ccfdcd 100644 --- a/src/lib/QtWidgets/QTabWidget.ts +++ b/src/lib/QtWidgets/QTabWidget.ts @@ -3,6 +3,8 @@ import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QIcon } from '../QtGui/QIcon'; import { TabPosition } from '../QtEnums'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -25,29 +27,27 @@ tabWidget.addTab(new QCalendarWidget(), new QIcon(), 'Tab 2'); ``` */ export class QTabWidget extends QWidget { - tabs: QWidget[]; - - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QTabWidget(parent.native); } else { native = new addon.QTabWidget(); } super(native); - this.tabs = []; } addTab(page: QWidget, icon: QIcon, label: string): number { const index = this.native.addTab(page.native, icon.native, label); - this.tabs.push(page); page.setFlexNodeSizeControlled(true); return index; } insertTab(index: number, page: QWidget, icon: QIcon, label: string): number { const newIndex = this.native.insertTab(index, page.native, icon.native, label); - this.tabs.splice(index, 0, page); return newIndex; } @@ -77,15 +77,19 @@ export class QTabWidget extends QWidget { removeTab(index: number): void { this.native.removeTab(index); - const toRemove = this.tabs[index]; + const toRemove = this.widget(index); toRemove.setFlexNodeSizeControlled(false); - this.tabs.splice(index, 1); } setTabsClosable(closeable: boolean): void { this.native.setTabsClosable(closeable); } + + widget(index: number): QWidget { + return wrapperCache.getWrapper(this.native.widget(index)) as QWidget; + } } +wrapperCache.registerWrapper('QTabWidgetWrap', QTabWidget); export interface QTabWidgetSignals extends QWidgetSignals { currentChanged: (index: number) => void; diff --git a/src/lib/QtWidgets/QTableView.ts b/src/lib/QtWidgets/QTableView.ts index 734bdfb1a..9fce94cb7 100644 --- a/src/lib/QtWidgets/QTableView.ts +++ b/src/lib/QtWidgets/QTableView.ts @@ -1,8 +1,11 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { SortOrder, PenStyle } from '../QtEnums'; import { QAbstractItemView, QAbstractItemViewSignals } from './QAbstractItemView'; import { QHeaderView } from './QHeaderView'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -20,9 +23,12 @@ const tableview = new QTableView(); ``` */ export class QTableView extends QAbstractItemView { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QTableView(parent.native); } else { native = new addon.QTableView(); @@ -185,5 +191,6 @@ export class QTableView e this.native.sortByColumn(column, order); } } +wrapperCache.registerWrapper('QTableViewWrap', QTableView); export type QTableViewSignals = QAbstractItemViewSignals; diff --git a/src/lib/QtWidgets/QTableWidget.ts b/src/lib/QtWidgets/QTableWidget.ts index dd1205d7c..5fba3e109 100644 --- a/src/lib/QtWidgets/QTableWidget.ts +++ b/src/lib/QtWidgets/QTableWidget.ts @@ -5,6 +5,8 @@ import { MatchFlag, ScrollHint, SortOrder } from '../QtEnums'; import { QTableWidgetItem } from './QTableWidgetItem'; import { QAbstractScrollArea, QAbstractScrollAreaSignals } from './QAbstractScrollArea'; import { QRect } from '../QtCore/QRect'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -39,12 +41,21 @@ win.show(); */ export class QTableWidget extends QAbstractScrollArea { items: Set; - constructor(rows: number, columns: number, parent?: QWidget) { - let native; - if (parent) { - native = new addon.QTableWidget(rows, columns, parent.native); + constructor(rowsOrNativeOrParent: QWidget | NativeElement | number, columns?: number, parent?: QWidget) { + let native: NativeElement; + if (checkIfNativeElement(rowsOrNativeOrParent)) { + native = rowsOrNativeOrParent as NativeElement; + } else if (typeof rowsOrNativeOrParent == 'number') { + const rows = rowsOrNativeOrParent; + if (parent) { + native = new addon.QTableWidget(rows, columns, parent.native); + } else { + native = new addon.QTableWidget(rows, columns); + } + } else if (rowsOrNativeOrParent != null) { + native = new addon.QTableWidget(rowsOrNativeOrParent.native); } else { - native = new addon.QTableWidget(rows, columns); + native = new addon.QTableWidget(); } super(native); this.items = new Set(); @@ -60,7 +71,6 @@ export class QTableWidget extends QAbstractScrollArea { } setCellWidget(row: number, column: number, widget: QWidget): void { this.native.setCellWidget(row, column, widget.native); - this.items.add(widget); } setItem(row: number, column: number, item: QTableWidgetItem): void { this.native.setItem(row, column, item.native); @@ -229,6 +239,7 @@ export class QTableWidget extends QAbstractScrollArea { return this.native.isSortingEnabled(); } } +wrapperCache.registerWrapper('QTableWidgetWrap', QTableWidget); interface Range { topRow: number; diff --git a/src/lib/QtWidgets/QTextBrowser.ts b/src/lib/QtWidgets/QTextBrowser.ts index 7e4e67a55..a64c10311 100644 --- a/src/lib/QtWidgets/QTextBrowser.ts +++ b/src/lib/QtWidgets/QTextBrowser.ts @@ -1,8 +1,10 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QUrl } from '../QtCore/QUrl'; import { QTextEdit, QTextEditSignals } from './QTextEdit'; +import { wrapperCache } from '../core/WrapperCache'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -22,9 +24,12 @@ const textBrowser = new QTextBrowser(); */ export class QTextBrowser extends QTextEdit { - constructor(parent?: QWidget) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - if (parent) { + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QTextBrowser(parent.native); } else { native = new addon.QTextBrowser(); @@ -84,6 +89,7 @@ export class QTextBrowser extends QTextEdit { this.native.reload(); } } +wrapperCache.registerWrapper('QTextBrowserWrap', QTextBrowser); export interface QTextBrowserSignals extends QTextEditSignals { anchorClicked: (link: QUrl) => void; diff --git a/src/lib/QtWidgets/QTextEdit.ts b/src/lib/QtWidgets/QTextEdit.ts index 9c5ddf12c..2dc51447c 100644 --- a/src/lib/QtWidgets/QTextEdit.ts +++ b/src/lib/QtWidgets/QTextEdit.ts @@ -1,11 +1,12 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QAbstractScrollArea, QAbstractScrollAreaSignals } from './QAbstractScrollArea'; import { AlignmentFlag, TextInteractionFlag } from '../QtEnums'; import { QFont } from '../QtGui/QFont'; import { QColor } from '../QtGui/QColor'; import { checkIfNativeElement } from '../utils/helpers'; import { NativeElement } from '../core/Component'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -25,20 +26,18 @@ const textEdit = new QTextEdit(); */ export class QTextEdit extends QAbstractScrollArea { - constructor(arg?: QWidget | NativeElement) { + constructor(arg?: QWidget | NativeElement) { let native: NativeElement; - let parent: QWidget = null; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (arg) { - parent = arg as QWidget; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QTextEdit(parent.native); } else { native = new addon.QTextEdit(); } super(native); } - setAcceptRichText(accept: boolean): void { this.setProperty('acceptRichText', accept); } @@ -232,6 +231,7 @@ export class QTextEdit exte this.native.zoomOut(range); } } +wrapperCache.registerWrapper('QTextEditWrap', QTextEdit); export enum AutoFormattingFlag { AutoNone = 0, diff --git a/src/lib/QtWidgets/QTimeEdit.ts b/src/lib/QtWidgets/QTimeEdit.ts index 7c49aae6a..aa63ac1dd 100644 --- a/src/lib/QtWidgets/QTimeEdit.ts +++ b/src/lib/QtWidgets/QTimeEdit.ts @@ -1,6 +1,9 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { QDateTimeEdit } from './QDateTimeEdit'; +import { wrapperCache } from '../core/WrapperCache'; +import { NativeElement } from '../core/Component'; +import { checkIfNativeElement } from '../utils/helpers'; /** @@ -20,9 +23,12 @@ const timeEdit = new QTimeEdit(); ``` */ export class QTimeEdit extends QDateTimeEdit { - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QTimeEdit(parent.native); } else { native = new addon.QTimeEdit(); @@ -30,3 +36,4 @@ export class QTimeEdit extends QDateTimeEdit { super(native); } } +wrapperCache.registerWrapper('QTimeEditWrap', QTimeEdit); diff --git a/src/lib/QtWidgets/QToolButton.ts b/src/lib/QtWidgets/QToolButton.ts index cf8c24bd6..0d3f8d22d 100644 --- a/src/lib/QtWidgets/QToolButton.ts +++ b/src/lib/QtWidgets/QToolButton.ts @@ -1,12 +1,13 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; -import { NativeElement, NativeRawPointer } from '../core/Component'; +import { QWidget, QWidgetSignals } from './QWidget'; +import { NativeElement } from '../core/Component'; import { QAbstractButton, QAbstractButtonSignals } from './QAbstractButton'; import { ToolButtonStyle } from '../QtEnums/ToolButtonStyle'; import { ArrowType } from '../QtEnums/ArrowType'; import { QAction } from '../QtWidgets/QAction'; import { QMenu } from './QMenu'; -import { checkIfNativeElement, checkIfNapiExternal } from '../utils/helpers'; +import { checkIfNativeElement } from '../utils/helpers'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -26,18 +27,13 @@ tool.setText('Help'); ``` */ export class QToolButton extends QAbstractButton { - private _defaultAction?: QAction | null; - private _menu?: QMenu | null; - - constructor(arg?: QWidget | NativeRawPointer | NativeElement, disableNativeDeletion = true) { - let native; + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; if (checkIfNativeElement(arg)) { native = arg as NativeElement; - } else if (checkIfNapiExternal(arg)) { - native = new addon.QToolButton(arg, disableNativeDeletion); - } else if (arg) { - const parentWidget = arg as QWidget; - native = new addon.QToolButton(parentWidget.native); + } else if (arg != null) { + const parent = arg as QWidget; + native = new addon.QToolButton(parent.native); } else { native = new addon.QToolButton(); } @@ -68,29 +64,22 @@ export class QToolButton extends QAbstractButton { return this.property('toolButtonStyle').toInt(); } setMenu(menu: QMenu): void { - this._menu = menu; this.native.setMenu(menu.native); } menu(): QMenu | null { - if (this._menu) { - return this._menu; - } - return null; + return wrapperCache.getWrapper(this.native.menu()) as QMenu; } setDefaultAction(action: QAction): void { - this._defaultAction = action; this.native.setDefaultAction(action.native); } defaultAction(): QAction | null { - if (this._defaultAction) { - return this._defaultAction; - } - return null; + return wrapperCache.getWrapper(this.native.defaultAction()) as QAction; } showMenu(): void { this.native.showMenu(); } } +wrapperCache.registerWrapper('QToolButtonWrap', QToolButton); export enum ToolButtonPopupMode { DelayedPopup, diff --git a/src/lib/QtWidgets/QTreeWidget.ts b/src/lib/QtWidgets/QTreeWidget.ts index 10fc06032..7747187d8 100644 --- a/src/lib/QtWidgets/QTreeWidget.ts +++ b/src/lib/QtWidgets/QTreeWidget.ts @@ -1,9 +1,10 @@ import addon from '../utils/addon'; -import { QWidget } from './QWidget'; +import { QWidget, QWidgetSignals } from './QWidget'; import { NativeElement } from '../core/Component'; import { QAbstractScrollArea, QAbstractScrollAreaSignals } from './QAbstractScrollArea'; import { QTreeWidgetItem } from './QTreeWidgetItem'; -import { MatchFlag } from '../..'; +import { checkIfNativeElement, MatchFlag } from '../..'; +import { wrapperCache } from '../core/WrapperCache'; /** @@ -52,9 +53,12 @@ export class QTreeWidget extends QAbstractScrollArea { topLevelItems: Set; itemWidgets: Map; - constructor(parent?: QWidget) { - let native; - if (parent) { + constructor(arg?: QWidget | NativeElement) { + let native: NativeElement; + if (checkIfNativeElement(arg)) { + native = arg as NativeElement; + } else if (arg != null) { + const parent = arg as QWidget; native = new addon.QTreeWidget(parent.native); } else { native = new addon.QTreeWidget(); @@ -188,6 +192,7 @@ export class QTreeWidget extends QAbstractScrollArea { this.native.clear(); } } +wrapperCache.registerWrapper('QTreeWidgetWrap', QTreeWidget); export interface QTreeWidgetSignals extends QAbstractScrollAreaSignals { itemSelectionChanged: () => void; diff --git a/src/lib/utils/helpers.ts b/src/lib/utils/helpers.ts index 8c621ad4f..8c5022c8a 100644 --- a/src/lib/utils/helpers.ts +++ b/src/lib/utils/helpers.ts @@ -2,7 +2,7 @@ import { NativeElement } from '../core/Component'; import addon from './addon'; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types -export function checkIfNativeElement(arg: any): boolean { +export function checkIfNativeElement(arg: any): arg is NativeElement { const nativeArg = arg as NativeElement; return nativeArg != null && typeof nativeArg === 'object' && nativeArg.type === 'native'; }