From 38b8c9536d334dad78de870b5bc06ba63ff879ec Mon Sep 17 00:00:00 2001 From: mspencer92 Date: Fri, 20 Mar 2020 04:43:54 -0400 Subject: [PATCH] Added QTreeWidget functions (#452) https://github.com/nodegui/nodegui/issues/231#issuecomment-601390056 --- .../QtWidgets/QTreeWidget/qtreewidget_wrap.h | 3 + .../QTreeWidget/qtreewidget_wrap.cpp | 62 ++++++++++++++++++- src/lib/QtWidgets/QTreeWidget.ts | 38 ++++++++++-- 3 files changed, 98 insertions(+), 5 deletions(-) diff --git a/src/cpp/include/nodegui/QtWidgets/QTreeWidget/qtreewidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTreeWidget/qtreewidget_wrap.h index b8c5720b4..37cfe5942 100644 --- a/src/cpp/include/nodegui/QtWidgets/QTreeWidget/qtreewidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTreeWidget/qtreewidget_wrap.h @@ -26,6 +26,9 @@ class DLL_EXPORT QTreeWidgetWrap : public Napi::ObjectWrap { static Napi::FunctionReference constructor; Napi::Value addTopLevelItem(const Napi::CallbackInfo &info); + Napi::Value addTopLevelItems(const Napi::CallbackInfo &info); + Napi::Value insertTopLevelItem(const Napi::CallbackInfo &info); + Napi::Value insertTopLevelItems(const Napi::CallbackInfo &info); Napi::Value selectedItems(const Napi::CallbackInfo &info); Napi::Value setColumnCount(const Napi::CallbackInfo &info); Napi::Value setHeaderLabel(const Napi::CallbackInfo &info); diff --git a/src/cpp/lib/QtWidgets/QTreeWidget/qtreewidget_wrap.cpp b/src/cpp/lib/QtWidgets/QTreeWidget/qtreewidget_wrap.cpp index e393773d9..b65c2ef0f 100644 --- a/src/cpp/lib/QtWidgets/QTreeWidget/qtreewidget_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QTreeWidget/qtreewidget_wrap.cpp @@ -14,6 +14,11 @@ Napi::Object QTreeWidgetWrap::init(Napi::Env env, Napi::Object exports) { Napi::Function func = DefineClass( env, CLASSNAME, {InstanceMethod("addTopLevelItem", &QTreeWidgetWrap::addTopLevelItem), + InstanceMethod("addTopLevelItems", &QTreeWidgetWrap::addTopLevelItems), + InstanceMethod("insertTopLevelItem", + &QTreeWidgetWrap::insertTopLevelItem), + InstanceMethod("insertTopLevelItems", + &QTreeWidgetWrap::insertTopLevelItems), InstanceMethod("selectedItems", &QTreeWidgetWrap::selectedItems), InstanceMethod("setColumnCount", &QTreeWidgetWrap::setColumnCount), InstanceMethod("setHeaderLabel", &QTreeWidgetWrap::setHeaderLabel), @@ -62,6 +67,61 @@ Napi::Value QTreeWidgetWrap::addTopLevelItem(const Napi::CallbackInfo& info) { this->instance->addTopLevelItem(item); return env.Null(); } + +Napi::Value QTreeWidgetWrap::addTopLevelItems(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + Napi::Array itemsNapi = info[0].As(); + QList items; + for (int i = 0; i < itemsNapi.Length(); i++) { + Napi::Value itemNapi = itemsNapi[i]; + Napi::Object itemObject = itemNapi.As(); + QTreeWidgetItemWrap* itemWrap = + Napi::ObjectWrap::Unwrap(itemObject); + QTreeWidgetItem* item = itemWrap->getInternalInstance(); + items.append(item); + } + this->instance->addTopLevelItems(items); + + return env.Null(); +} + +Napi::Value QTreeWidgetWrap::insertTopLevelItem( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int index = info[0].As().Int32Value(); + Napi::Object itemObject = info[1].As(); + QTreeWidgetItemWrap* itemWrap = + Napi::ObjectWrap::Unwrap(itemObject); + QTreeWidgetItem* item = itemWrap->getInternalInstance(); + this->instance->insertTopLevelItem(index, item); + + return env.Null(); +} + +Napi::Value QTreeWidgetWrap::insertTopLevelItems( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + int index = info[0].As().Int32Value(); + Napi::Array itemsNapi = info[1].As(); + QList items; + for (int i = 0; i < itemsNapi.Length(); i++) { + Napi::Value itemNapi = itemsNapi[i]; + Napi::Object itemObject = itemNapi.As(); + QTreeWidgetItemWrap* itemWrap = + Napi::ObjectWrap::Unwrap(itemObject); + QTreeWidgetItem* item = itemWrap->getInternalInstance(); + items.append(item); + } + this->instance->insertTopLevelItems(index, items); + + return env.Null(); +} + Napi::Value QTreeWidgetWrap::selectedItems(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); @@ -158,4 +218,4 @@ Napi::Value QTreeWidgetWrap::currentItem(const Napi::CallbackInfo& info) { env, new QTreeWidgetItem(*currentItem))}); return value; -} \ No newline at end of file +} diff --git a/src/lib/QtWidgets/QTreeWidget.ts b/src/lib/QtWidgets/QTreeWidget.ts index 2212b5b2c..f5324e291 100644 --- a/src/lib/QtWidgets/QTreeWidget.ts +++ b/src/lib/QtWidgets/QTreeWidget.ts @@ -25,10 +25,17 @@ const item2 = new QTreeWidgetItem(); item2.setText(0, `item-2`); const item3 = new QTreeWidgetItem(); item3.setText(0, `item-3`); +const item4 = new QTreeWidgetItem(); +item4.setText(0, `item-4`); +const item5 = new QTreeWidgetItem(); +item5.setText(0, `item-5`); +const item6 = new QTreeWidgetItem(); +item6.setText(0, `item-6`); tree.addTopLevelItem(item1); -tree.addTopLevelItem(item2); -tree.addTopLevelItem(item3); +tree.insertTopLevelItems(0, [item2, item3]); +tree.addTopLevelItems([item4, item5]); +tree.insertTopLevelItem(2, item6); // Add children to item1 const c1item1 = new QTreeWidgetItem(item1); @@ -38,8 +45,7 @@ c1item2.setText(0, `c1item1`); win.setCentralWidget(tree); win.show(); -(global as any).win = win; -``` +(global as any).win = win;``` */ export class QTreeWidget extends QAbstractScrollArea { native: NativeElement; @@ -65,6 +71,30 @@ export class QTreeWidget extends QAbstractScrollArea { this.topLevelItems.add(item); this.native.addTopLevelItem(item.native); } + + addTopLevelItems(items: QTreeWidgetItem[]): void { + const napiItems: NativeElement[] = []; + items.forEach(item => { + this.topLevelItems.add(item); + napiItems.push(item.native); + }); + this.native.addTopLevelItems(napiItems); + } + + insertTopLevelItem(index: number, item: QTreeWidgetItem): void { + this.topLevelItems.add(item); + this.native.insertTopLevelItem(index, item.native); + } + + insertTopLevelItems(index: number, items: QTreeWidgetItem[]): void { + const napiItems: NativeElement[] = []; + items.forEach(item => { + this.topLevelItems.add(item); + napiItems.push(item.native); + }); + this.native.insertTopLevelItems(index, napiItems); + } + setHeaderHidden(hide: boolean): void { this.native.setProperty('headerHidden', hide); }