nodeguy/src/lib/QtWidgets/QListWidget.ts
feng8848 e09333c948
fix issue #473 (#475)
* fix issue #473

* fix ts lint

Co-authored-by: wuxiaofeng <wuxiaofeng@erayt.com>
2020-03-30 20:05:27 +02:00

157 lines
5.2 KiB
TypeScript

import addon from '../utils/addon';
import { NodeWidget, QWidget } from './QWidget';
import { NativeElement, Component } from '../core/Component';
import { QListWidgetItem } from './QListWidgetItem';
import { NodeListView, QListViewSignals } from './QListView';
import { QRect } from '../QtCore/QRect';
import { SortOrder, ScrollHint, MatchFlag } from '../QtEnums';
/**
> Create and control a item-based list.
* **This class is a JS wrapper around Qt's [QListWidget class](https://doc.qt.io/qt-5/qlistwidget.html)**
### Example
```javascript
const { QListWidget, QListWidgetItem } = require("@nodegui/nodegui");
const listWidget = new QListWidget();
for (let i = 0; i < 30; i++) {
let listWidgetItem = new QListWidgetItem();
listWidgetItem.setText('listWidgetItem ' + i);
if (i===3) {
listWidgetItem.setCheckState(2);
} else {
listWidgetItem.setCheckState(0);
}
listWidget.addItem(listWidgetItem);
}
```
*/
export class QListWidget extends NodeListView<QListWidgetSignals> {
native: NativeElement;
items: Set<NativeElement | Component>;
constructor();
constructor(parent: NodeWidget<any>);
constructor(parent?: NodeWidget<any>) {
let native;
if (parent) {
native = new addon.QListWidget(parent.native);
} else {
native = new addon.QListWidget();
}
super(native);
this.native = native;
parent && this.setNodeParent(parent);
this.items = new Set();
}
count(): number {
return this.property('count').toInt();
}
setCurrentRow(row: number): void {
this.setProperty('currentRow', row);
}
currentRow(): number {
return this.property('currentRow').toInt();
}
setSortingEnabled(enable: boolean): void {
this.setProperty('sortingEnabled', enable);
}
isSortingEnabled(): boolean {
return this.property('sortingEnabled').toBool();
}
addItem(item: QListWidgetItem): void {
this.native.addItem(item.native);
this.items.add(item);
}
addItems(labels: string[]): void {
this.native.addItems(labels);
}
closePersistentEditor(item: QListWidgetItem): void {
this.native.closePersistentEditor(item.native);
}
currentItem(): QListWidgetItem {
return new QListWidgetItem(this.native.currentItem());
}
editItem(item: Component): void {
this.native.editItem(item.native);
}
findItems(text: string, flags: MatchFlag): QListWidgetItem[] {
const nativeItems = this.native.findItems(text, flags);
return nativeItems.map(function (item: QListWidgetItem) {
return new QListWidgetItem(item);
});
}
insertItem(row: number, item: QListWidgetItem): void {
this.native.insertItem(row, item.native);
this.items.add(item);
}
insertItems(row: number, labels: string[]): void {
this.native.insertItems(row, labels);
}
isPersistentEditorOpen(item: QListWidgetItem): boolean {
return this.native.isPersistentEditorOpen(item.native);
}
item(row: number): QListWidgetItem {
return new QListWidgetItem(this.native.item(row));
}
itemAt(x: number, y: number): QListWidgetItem {
return new QListWidgetItem(this.native.itemAt(x, y));
}
itemWidget(item: QListWidgetItem): QWidget {
return new QWidget(this.native.itemWidget(item.native));
}
openPersistentEditor(item: QListWidgetItem): void {
this.native.openPersistentEditor(item.native);
}
removeItemWidget(item: QListWidgetItem): void {
this.native.removeItemWidget(item.native);
}
row(item: QListWidgetItem): number {
return this.native.row(item.native);
}
selectedItems(): QListWidgetItem[] {
const nativeItems = this.native.selectedItems();
return nativeItems.map(function (item: QListWidgetItem) {
return new QListWidgetItem(item);
});
}
setCurrentItem(item: QListWidgetItem): void {
this.native.setCurrentItem(item.native);
}
setItemWidget(item: QListWidgetItem, widget: NodeWidget<any>): void {
this.native.setItemWidget(item.native, widget.native);
}
sortItems(order = SortOrder.AscendingOrder): void {
this.native.sortItems(order);
}
takeItem(row: number): void {
this.native.takeItem(row);
}
visualItemRect(item: QListWidgetItem): QRect {
return new QRect(this.native.visualItemRect(item.native));
}
clear(): void {
this.native.clear();
}
scrollToItem(item: QListWidgetItem, hint = ScrollHint.EnsureVisible): void {
this.native.scrollToItem(item.native, hint);
}
}
export interface QListWidgetSignals extends QListViewSignals {
currentItemChanged: (current: QListWidgetItem, previous: QListWidgetItem) => void;
currentRowChanged: (currentRow: number) => void;
currentTextChanged: (currentText: string) => void;
itemActivated: (item: QListWidgetItem) => void;
itemChanged: (item: QListWidgetItem) => void;
itemClicked: (item: QListWidgetItem) => void;
itemDoubleClicked: (item: QListWidgetItem) => void;
itemEntered: (item: QListWidgetItem) => void;
itemPressed: (item: QListWidgetItem) => void;
itemSelectionChanged: () => void;
}