nodeguy/src/lib/QtWidgets/QTreeWidget.ts
robertkruis 3a8f405e2d Further enhancements on the QTreeWidget and QTreeWidgetItem (#340)
* Extend QTreeWidget implementation

* Added more QTreeWidget and QTreeWidgetItem APIs

Supports itemClicked and itemChanged events and several APIs to be able to edit columns of the QTreeWidgetItem

* Incorporate suggested changes

* Implemented all QTreeWidget signals

* fix currentItem

* lint fix

Co-authored-by: Atul R <atulanand94@gmail.com>
2020-01-11 12:29:46 +05:30

134 lines
4.2 KiB
TypeScript

import addon from '../utils/addon';
import { NodeWidget, QWidget } from './QWidget';
import { NativeElement } from '../core/Component';
import { QAbstractScrollArea, QAbstractScrollAreaSignals } from './QAbstractScrollArea';
import { QTreeWidgetItem } from './QTreeWidgetItem';
/**
> Creates a tree view that uses a predefined tree model.
* **This class is a JS wrapper around Qt's [QTreeWidget class](https://doc.qt.io/qt-5/qtreewidget.html)**
### Example
```javascript
const { QMainWindow, QTreeWidgetItem, QTreeWidget } = require("@nodegui/nodegui");
const win = new QMainWindow();
const tree = new QTreeWidget();
const item1 = new QTreeWidgetItem();
item1.setText(0, `item-1`);
const item2 = new QTreeWidgetItem();
item2.setText(0, `item-2`);
const item3 = new QTreeWidgetItem();
item3.setText(0, `item-3`);
tree.addTopLevelItem(item1);
tree.addTopLevelItem(item2);
tree.addTopLevelItem(item3);
// Add children to item1
const c1item1 = new QTreeWidgetItem(item1);
c1item1.setText(0, `c1item1`);
const c1item2 = new QTreeWidgetItem(item1);
c1item2.setText(0, `c1item1`);
win.setCentralWidget(tree);
win.show();
(global as any).win = win;
```
*/
export class QTreeWidget extends QAbstractScrollArea<QTreeWidgetSignals> {
native: NativeElement;
topLevelItems: Set<QTreeWidgetItem>;
itemWidgets: Map<QTreeWidgetItem, QWidget>;
constructor();
constructor(parent: NodeWidget<any>);
constructor(parent?: NodeWidget<any>) {
let native;
if (parent) {
native = new addon.QTreeWidget(parent.native);
} else {
native = new addon.QTreeWidget();
}
super(native);
this.native = native;
this.setNodeParent(parent);
this.topLevelItems = new Set<QTreeWidgetItem>();
this.itemWidgets = new Map<QTreeWidgetItem, QWidget>();
}
addTopLevelItem(item: QTreeWidgetItem): void {
this.topLevelItems.add(item);
this.native.addTopLevelItem(item.native);
}
setHeaderHidden(hide: boolean): void {
this.native.setProperty('headerHidden', hide);
}
selectedItems(): QTreeWidgetItem[] {
const nativeItems = this.native.selectedItems();
return nativeItems.map(function(eachItem: QTreeWidgetItem) {
return new QTreeWidgetItem(eachItem);
});
}
/**
* Sets the column count of this QTreeWidget.
* @param columnCount The number of columns.
*/
setColumnCount(columnCount: number): void {
this.native.setColumnCount(columnCount);
}
/**
* Sets the header label.
* @param label The header label.
*/
setHeaderLabel(label: string): void {
this.native.setHeaderLabel(label);
}
/**
* Sets the header labels of the existing columns.
* @param labels The header labels for each column.
*/
setHeaderLabels(labels: string[]): void {
this.native.setHeaderLabels(labels);
}
/**
* Sets the given widget to be displayed in the cell specified by the given item and column.
* @param item The targeted item.
* @param column The column in which to show the edit widget.
* @param widget The edit widget.
*/
setItemWidget(item: QTreeWidgetItem, column: number, widget: QWidget): void {
this.itemWidgets.set(item, widget);
this.native.setItemWidget(item.native, column, widget.native);
}
/**
* Returns the current item in the tree widget.
*/
currentItem(): QTreeWidgetItem {
return new QTreeWidgetItem(this.native.currentItem());
}
}
export interface QTreeWidgetSignals extends QAbstractScrollAreaSignals {
itemSelectionChanged: () => void;
itemClicked: (item: QTreeWidgetItem, column: number) => void;
itemChanged: (item: QTreeWidgetItem, column: number) => void;
currentItemChanged: (current: QTreeWidgetItem, previous: QTreeWidgetItem) => void;
itemActivated: (item: QTreeWidgetItem | null, column: number) => void;
itemCollapsed: (item: QTreeWidgetItem) => void;
itemDoubleClicked: (item: QTreeWidgetItem | null, column: number) => void;
itemEntered: (item: QTreeWidgetItem, column: number) => void;
itemExpanded: (item: QTreeWidgetItem) => void;
itemPressed: (item: QTreeWidgetItem | null, column: number) => void;
}