From 7d33f250403e47bec3f150e4618a214aedbc2d0e Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 17 Dec 2019 23:59:28 +0530 Subject: [PATCH] Adds itemData and icon and bulk clear to combobox (#276) --- .../QtWidgets/QComboBox/qcombobox_wrap.h | 2 + .../QtWidgets/QComboBox/qcombobox_wrap.cpp | 45 +++++++++++++++++-- src/index.ts | 2 +- src/lib/QtWidgets/QComboBox.ts | 38 +++++++++++++--- 4 files changed, 76 insertions(+), 11 deletions(-) diff --git a/src/cpp/include/nodegui/QtWidgets/QComboBox/qcombobox_wrap.h b/src/cpp/include/nodegui/QtWidgets/QComboBox/qcombobox_wrap.h index d4ce3590d..8bb1da1a1 100644 --- a/src/cpp/include/nodegui/QtWidgets/QComboBox/qcombobox_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QComboBox/qcombobox_wrap.h @@ -29,6 +29,7 @@ class QComboBoxWrap : public Napi::ObjectWrap { Napi::Value currentText(const Napi::CallbackInfo& info); Napi::Value insertSeparator(const Napi::CallbackInfo& info); Napi::Value itemText(const Napi::CallbackInfo& info); + Napi::Value itemData(const Napi::CallbackInfo& info); Napi::Value removeItem(const Napi::CallbackInfo& info); Napi::Value sizeAdjustPolicy(const Napi::CallbackInfo& info); Napi::Value setSizeAdjustPolicy(const Napi::CallbackInfo& info); @@ -36,6 +37,7 @@ class QComboBoxWrap : public Napi::ObjectWrap { Napi::Value setMaxVisibleItems(const Napi::CallbackInfo& info); Napi::Value isEditable(const Napi::CallbackInfo& info); Napi::Value setEditable(const Napi::CallbackInfo& info); + Napi::Value clear(const Napi::CallbackInfo& info); QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/lib/QtWidgets/QComboBox/qcombobox_wrap.cpp b/src/cpp/lib/QtWidgets/QComboBox/qcombobox_wrap.cpp index 0fe5b858b..6787032c3 100644 --- a/src/cpp/lib/QtWidgets/QComboBox/qcombobox_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QComboBox/qcombobox_wrap.cpp @@ -1,7 +1,8 @@ #include "QtWidgets/QComboBox/qcombobox_wrap.h" - #include +#include "QtCore/QVariant/qvariant_wrap.h" +#include "QtGui/QIcon/qicon_wrap.h" #include "Extras/Utils/nutils.h" #include "QtWidgets/QWidget/qwidget_wrap.h" @@ -21,6 +22,7 @@ Napi::Object QComboBoxWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("currentText", &QComboBoxWrap::currentText), InstanceMethod("insertSeparator", &QComboBoxWrap::insertSeparator), InstanceMethod("itemText", &QComboBoxWrap::itemText), + InstanceMethod("itemData", &QComboBoxWrap::itemData), InstanceMethod("removeItem", &QComboBoxWrap::removeItem), InstanceMethod("sizeAdjustPolicy", &QComboBoxWrap::sizeAdjustPolicy), InstanceMethod("setSizeAdjustPolicy", @@ -29,6 +31,7 @@ Napi::Object QComboBoxWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("setMaxVisibleItems", &QComboBoxWrap::setMaxVisibleItems), InstanceMethod("isEditable", &QComboBoxWrap::isEditable), InstanceMethod("setEditable", &QComboBoxWrap::setEditable), + InstanceMethod("clear", &QComboBoxWrap::clear), QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QComboBoxWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); @@ -63,10 +66,25 @@ QComboBoxWrap::QComboBoxWrap(const Napi::CallbackInfo& info) Napi::Value QComboBoxWrap::addItem(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); + if (info.Length() == 3) { + Napi::Object iconWrap = info[0].As(); + QIconWrap* iconWrapValue = Napi::ObjectWrap::Unwrap(iconWrap); + QIcon* icon = iconWrapValue->getInternalInstance(); + std::string text = info[1].As().Utf8Value(); + Napi::Object variantWrap = info[2].As(); + QVariantWrap* variantWrapValue = + Napi::ObjectWrap::Unwrap(variantWrap); + QVariant* variant = variantWrapValue->getInternalInstance(); + this->instance->addItem(*icon, text.c_str(), *variant); + } else { + std::string text = info[0].As().Utf8Value(); + Napi::Object variantWrap = info[1].As(); + QVariantWrap* variantWrapValue = + Napi::ObjectWrap::Unwrap(variantWrap); + QVariant* variant = variantWrapValue->getInternalInstance(); + this->instance->addItem(text.c_str(), *variant); + } - std::string text = info[0].As().Utf8Value(); - - this->instance->addItem(text.c_str()); return env.Null(); } @@ -147,6 +165,17 @@ Napi::Value QComboBoxWrap::itemText(const Napi::CallbackInfo& info) { return Napi::String::New(env, this->instance->itemText(index).toStdString()); } +Napi::Value QComboBoxWrap::itemData(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int index = info[0].As().Int32Value(); + QVariant* variant = new QVariant(this->instance->itemData(index)); + auto variantWrap = QVariantWrap::constructor.New( + {Napi::External::New(env, variant)}); + return variantWrap; +} + Napi::Value QComboBoxWrap::removeItem(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); @@ -205,3 +234,11 @@ Napi::Value QComboBoxWrap::setEditable(const Napi::CallbackInfo& info) { this->instance->setEditable(editable); return env.Null(); } + +Napi::Value QComboBoxWrap::clear(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + this->instance->clear(); + return env.Null(); +} diff --git a/src/index.ts b/src/index.ts index 2c125fefd..ad831a5b6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -32,7 +32,7 @@ export { QFileDialog, QFileDialogEvents } from './lib/QtWidgets/QFileDialog'; export { QLineEdit, QLineEditEvents, EchoMode } from './lib/QtWidgets/QLineEdit'; export { QMainWindow, QMainWindowEvents } from './lib/QtWidgets/QMainWindow'; export { QProgressBar, QProgressBarEvents } from './lib/QtWidgets/QProgressBar'; -export { QComboBox, QComboBoxEvents } from './lib/QtWidgets/QComboBox'; +export { QComboBox, QComboBoxEvents, InsertPolicy } from './lib/QtWidgets/QComboBox'; export { QPushButton, QPushButtonEvents } from './lib/QtWidgets/QPushButton'; export { QToolButton, QToolButtonEvents, ToolButtonPopupMode } from './lib/QtWidgets/QToolButton'; export { QSpinBox, QSpinBoxEvents } from './lib/QtWidgets/QSpinBox'; diff --git a/src/lib/QtWidgets/QComboBox.ts b/src/lib/QtWidgets/QComboBox.ts index 8bcc79cd9..000ae6b80 100644 --- a/src/lib/QtWidgets/QComboBox.ts +++ b/src/lib/QtWidgets/QComboBox.ts @@ -3,6 +3,8 @@ import { NodeWidget } from './QWidget'; import { BaseWidgetEvents } from '../core/EventWidget'; import { NativeElement } from '../core/Component'; import { SizeAdjustPolicy } from '../QtEnums'; +import { QIcon } from '../QtGui/QIcon'; +import { QVariant } from '../QtCore/QVariant'; export const QComboBoxEvents = Object.freeze({ currentIndexChanged: 'currentIndexChanged', @@ -23,11 +25,19 @@ export class QComboBox extends NodeWidget { this.native = native; this.nodeParent = parent; } - addItem(value: string): void { - this.native.addItem(value); + addItem(icon: QIcon | undefined, text: string, userData: QVariant = new QVariant()): void { + if (icon) { + this.native.addItem(icon.native, text, userData.native); + } else { + this.native.addItem(text, userData.native); + } } - insertItem(index: number, text: string): void { - this.native.insertItem(index, text); + insertItem(index: number, icon: QIcon | undefined, text: string, userData: QVariant = new QVariant()): void { + if (icon) { + this.native.insertItem(index, icon.native, text, userData.native); + } else { + this.native.insertItem(index, text, userData.native); + } } addItems(texts: string[]): void { this.native.addItems(texts); @@ -44,8 +54,11 @@ export class QComboBox extends NodeWidget { insertSeparator(index: number): void { this.native.insertSeparator(index); } - itemText(index: number): void { - this.native.itemText(index); + itemText(index: number): string { + return this.native.itemText(index); + } + itemData(index: number): QVariant { + return new QVariant(this.native.itemData(index)); } removeItem(index: number): void { this.native.removeItem(index); @@ -68,4 +81,17 @@ export class QComboBox extends NodeWidget { setEditable(editable: boolean): void { this.native.setEditable(editable); } + clear(): void { + this.native.clear(); + } +} + +export enum InsertPolicy { + NoInsert, + InsertAtTop, + InsertAtCurrent, + InsertAtBottom, + InsertAfterCurrent, + InsertBeforeCurrent, + InsertAlphabetically, }