Adds itemData and icon and bulk clear to combobox (#276)

This commit is contained in:
Atul R 2019-12-17 23:59:28 +05:30 committed by GitHub
parent 16a74dc589
commit 7d33f25040
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 76 additions and 11 deletions

View File

@ -29,6 +29,7 @@ class QComboBoxWrap : public Napi::ObjectWrap<QComboBoxWrap> {
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<QComboBoxWrap> {
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
};

View File

@ -1,7 +1,8 @@
#include "QtWidgets/QComboBox/qcombobox_wrap.h"
#include <QWidget>
#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<Napi::Object>();
QIconWrap* iconWrapValue = Napi::ObjectWrap<QIconWrap>::Unwrap(iconWrap);
QIcon* icon = iconWrapValue->getInternalInstance();
std::string text = info[1].As<Napi::String>().Utf8Value();
Napi::Object variantWrap = info[2].As<Napi::Object>();
QVariantWrap* variantWrapValue =
Napi::ObjectWrap<QVariantWrap>::Unwrap(variantWrap);
QVariant* variant = variantWrapValue->getInternalInstance();
this->instance->addItem(*icon, text.c_str(), *variant);
} else {
std::string text = info[0].As<Napi::String>().Utf8Value();
Napi::Object variantWrap = info[1].As<Napi::Object>();
QVariantWrap* variantWrapValue =
Napi::ObjectWrap<QVariantWrap>::Unwrap(variantWrap);
QVariant* variant = variantWrapValue->getInternalInstance();
this->instance->addItem(text.c_str(), *variant);
}
std::string text = info[0].As<Napi::String>().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<Napi::Number>().Int32Value();
QVariant* variant = new QVariant(this->instance->itemData(index));
auto variantWrap = QVariantWrap::constructor.New(
{Napi::External<QVariant>::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();
}

View File

@ -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';

View File

@ -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,
}