Add QIcon support to QTreeWidgetItem. (#657)

* Add QIcon support to QTreeWidgetItem.

Signed-off-by: R. Douglas Barbieri <doug@dooglio.net>

* Move to QTreeWidgetItem from QTableWidgetItem...

I made a mistake and added the icon support to `QTableWidgetItem`
instead of the tree widget.

* Ran prettier.

* Add small test for the widget and item.

* Added tree widget test to demo.
This commit is contained in:
Doug Barbieri 2020-08-12 09:03:29 -05:00 committed by GitHub
parent 9946dfa568
commit fc64e7af99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 129 additions and 1 deletions

View File

@ -28,6 +28,8 @@ class DLL_EXPORT QTreeWidgetItemWrap
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value setIcon(const Napi::CallbackInfo &info);
Napi::Value icon(const Napi::CallbackInfo &info);
Napi::Value setText(const Napi::CallbackInfo &info);
Napi::Value parent(const Napi::CallbackInfo &info);
Napi::Value childCount(const Napi::CallbackInfo &info);

View File

@ -1,6 +1,7 @@
#include "QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.h"
#include "Extras/Utils/nutils.h"
#include "QtGui/QIcon/qicon_wrap.h"
#include "core/Component/component_wrap.h"
Napi::FunctionReference QTableWidgetItemWrap::constructor;

View File

@ -14,7 +14,9 @@ Napi::Object QTreeWidgetItemWrap::init(Napi::Env env, Napi::Object exports) {
char CLASSNAME[] = "QTreeWidgetItem";
Napi::Function func = DefineClass(
env, CLASSNAME,
{InstanceMethod("setText", &QTreeWidgetItemWrap::setText),
{InstanceMethod("setIcon", &QTreeWidgetItemWrap::setIcon),
InstanceMethod("icon", &QTreeWidgetItemWrap::text),
InstanceMethod("setText", &QTreeWidgetItemWrap::setText),
InstanceMethod("parent", &QTreeWidgetItemWrap::parent),
InstanceMethod("child", &QTreeWidgetItemWrap::child),
InstanceMethod("text", &QTreeWidgetItemWrap::text),
@ -133,6 +135,26 @@ QTreeWidgetItemWrap::QTreeWidgetItemWrap(const Napi::CallbackInfo &info)
this->rawData = extrautils::configureComponent(this->getInternalInstance());
}
Napi::Value QTreeWidgetItemWrap::setIcon(const Napi::CallbackInfo &info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
int const column = info[0].As<Napi::Number>().Int32Value();
Napi::Object const iconObject = info[1].As<Napi::Object>();
QIconWrap *iconWrap = Napi::ObjectWrap<QIconWrap>::Unwrap(iconObject);
this->instance->setIcon(column, *iconWrap->getInternalInstance());
return env.Null();
}
Napi::Value QTreeWidgetItemWrap::icon(const Napi::CallbackInfo &info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::Number const column = info[0].As<Napi::Number>();
QIcon icon = this->instance->icon(column);
auto instance = QIconWrap::constructor.New(
{Napi::External<QIcon>::New(env, new QIcon(icon))});
return instance;
}
Napi::Value QTreeWidgetItemWrap::setText(const Napi::CallbackInfo &info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);

View File

@ -1,6 +1,9 @@
import { QMainWindow, QWidget } from '.';
import { QGridLayout } from './lib/QtWidgets/QGridLayout';
import { QLabel } from './lib/QtWidgets/QLabel';
import { QTreeWidget } from './lib/QtWidgets/QTreeWidget';
import { QTreeWidgetItem } from './lib/QtWidgets/QTreeWidgetItem';
import { QIcon } from './lib/QtGui/QIcon';
const win = new QMainWindow();
win.resize(500, 500);
@ -41,8 +44,58 @@ columnFour.setText('Four');
columnFour.setInlineStyle('background-color: orange');
outerLayout.addWidget(columnFour, 1, 1);
const tree = new QTreeWidget();
tree.setColumnCount(2);
tree.setHeaderLabels(['First Column', 'Second Column']);
tree.setSortingEnabled(true);
tree.setInlineStyle('font-size: 24px');
outerLayout.addWidget(tree, 2, 0, 2, 0);
console.log(outerLayout.rowCount(), outerLayout.columnCount());
const myImage = './website/static/img/logo.png';
const icon = new QIcon(myImage);
const item1 = new QTreeWidgetItem();
item1.setText(0, `item-1`);
item1.setText(1, `1-item-1`);
item1.setIcon(1, icon);
const item2 = new QTreeWidgetItem();
item2.setText(0, `item-2`);
item2.setText(1, `1-item-2`);
item2.setIcon(1, icon);
const item3 = new QTreeWidgetItem();
item3.setText(0, `item-3`);
item3.setText(1, `1-item-3`);
item3.setIcon(1, icon);
const item4 = new QTreeWidgetItem();
item4.setText(0, `item-4`);
item4.setText(1, `1-item-4`);
item4.setIcon(1, icon);
const item5 = new QTreeWidgetItem();
item5.setText(0, `item-5`);
item5.setText(1, `1-item-5`);
item5.setIcon(1, icon);
const item6 = new QTreeWidgetItem();
item6.setText(0, `item-6`);
item6.setText(1, `1-item-6`);
item6.setIcon(1, icon);
console.info('item6.icon()=', item6.icon(1));
tree.addTopLevelItem(item1);
tree.insertTopLevelItems(0, [item2, item3]);
tree.addTopLevelItems([item4, item5]);
tree.insertTopLevelItem(2, item6);
// Add children to item1
const c1item1 = new QTreeWidgetItem(item1);
c1item1.setText(0, `c1item1`);
c1item1.setText(1, `c1item2`);
const c1item2 = new QTreeWidgetItem(item1);
c1item2.setText(0, `c1item1`);
c1item2.setText(1, `c1item2`);
win.setCentralWidget(outer);
win.show();
(global as any).win = win;

View File

@ -1,6 +1,7 @@
import addon from '../utils/addon';
import { Component, NativeElement } from '../core/Component';
import { checkIfNativeElement } from '../utils/helpers';
import { QIcon } from '../QtGui/QIcon';
import { QTreeWidget } from './QTreeWidget';
import { ItemFlag } from '../QtEnums/ItemFlag';
import { CheckState, ItemDataRole } from '../QtEnums';
@ -163,4 +164,19 @@ export class QTreeWidgetItem extends Component {
isHidden(): boolean {
return this.native.isHidden();
}
/**
* Sets the icon for the item.
* @param icon The icon object
*/
setIcon(column: number, icon: QIcon): void {
this.native.setIcon(column, icon.native);
}
/**
* Returns the icon object for the item.
*/
icon(column: number): QIcon {
return new QIcon(this.native.icon(column));
}
}

View File

@ -0,0 +1,34 @@
import { QTreeWidget } from '../QTreeWidget';
import { QTreeWidgetItem } from '../QTreeWidgetItem';
import { QIcon } from '../../QtGui/QIcon';
import path from 'path';
function createTreeWidget(): QTreeWidget {
const tree = new QTreeWidget();
tree.setColumnCount(2);
tree.setHeaderLabels(['First Column', 'Second Column']);
return tree;
}
describe('QTreeWidget', () => {
it('instantiate a tree widget', () => {
const tree = createTreeWidget();
expect(tree.inherits('QTreeWidget')).toBe(true);
});
it('setText', () => {
const tree = createTreeWidget();
const item = new QTreeWidgetItem();
item.setText(0, 'row0, column0');
expect(item.text(0)).toEqual('row0, column0');
tree.addTopLevelItem(item);
});
it('setIcon', () => {
const item = new QTreeWidgetItem();
const testImagePath = path.resolve(__dirname, 'assets', 'nodegui.png');
const icon = new QIcon(testImagePath);
item.setText(0, 'row0, column0');
item.setIcon(0, icon);
// TODO: figure out a way to check this. They are not equivalent.
// expect(item.icon(0).cacheKey()).toEqual(icon.cacheKey());
});
});