From cab30f48220d3b6d328d14c919a503b2ed8258b8 Mon Sep 17 00:00:00 2001 From: Adam Gastineau Date: Mon, 25 May 2020 07:08:28 -0700 Subject: [PATCH] Added support for setRow/ColumnCount (#578) --- .../QTableWidget/qtablewidget_wrap.h | 4 ++ .../QTableWidget/qtablewidget_wrap.cpp | 34 +++++++++++ src/demo.ts | 57 +++++++++++++------ src/lib/QtWidgets/QTableWidget.ts | 12 ++++ 4 files changed, 89 insertions(+), 18 deletions(-) diff --git a/src/cpp/include/nodegui/QtWidgets/QTableWidget/qtablewidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTableWidget/qtablewidget_wrap.h index 79984bc2d..7f853284e 100644 --- a/src/cpp/include/nodegui/QtWidgets/QTableWidget/qtablewidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTableWidget/qtablewidget_wrap.h @@ -53,6 +53,10 @@ class DLL_EXPORT QTableWidgetWrap : public Napi::ObjectWrap { Napi::Value sortByColumn(const Napi::CallbackInfo& info); Napi::Value setColumnWidth(const Napi::CallbackInfo& info); Napi::Value setRowHeight(const Napi::CallbackInfo& info); + Napi::Value columnCount(const Napi::CallbackInfo& info); + Napi::Value rowCount(const Napi::CallbackInfo& info); + Napi::Value setColumnCount(const Napi::CallbackInfo& info); + Napi::Value setRowCount(const Napi::CallbackInfo& info); Napi::Value setSortingEnabled(const Napi::CallbackInfo& info); Napi::Value isSortingEnabled(const Napi::CallbackInfo& info); }; diff --git a/src/cpp/lib/QtWidgets/QTableWidget/qtablewidget_wrap.cpp b/src/cpp/lib/QtWidgets/QTableWidget/qtablewidget_wrap.cpp index 9ce5bdc3a..1f23815ab 100644 --- a/src/cpp/lib/QtWidgets/QTableWidget/qtablewidget_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QTableWidget/qtablewidget_wrap.cpp @@ -52,6 +52,10 @@ Napi::Object QTableWidgetWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("sortByColumn", &QTableWidgetWrap::sortByColumn), InstanceMethod("setColumnWidth", &QTableWidgetWrap::setColumnWidth), InstanceMethod("setRowHeight", &QTableWidgetWrap::setRowHeight), + InstanceMethod("columnCount", &QTableWidgetWrap::columnCount), + InstanceMethod("rowCount", &QTableWidgetWrap::rowCount), + InstanceMethod("setColumnCount", &QTableWidgetWrap::setColumnCount), + InstanceMethod("setRowCount", &QTableWidgetWrap::setRowCount), InstanceMethod("setSortingEnabled", &QTableWidgetWrap::setSortingEnabled), InstanceMethod("isSortingEnabled", &QTableWidgetWrap::isSortingEnabled), @@ -429,6 +433,36 @@ Napi::Value QTableWidgetWrap::setRowHeight(const Napi::CallbackInfo& info) { this->instance->setRowHeight(row, height); return env.Null(); } +Napi::Value QTableWidgetWrap::columnCount(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int count = static_cast(this->instance->columnCount()); + return Napi::Number::New(env, count); +} +Napi::Value QTableWidgetWrap::rowCount(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int count = static_cast(this->instance->rowCount()); + return Napi::Number::New(env, count); +} +Napi::Value QTableWidgetWrap::setColumnCount(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int count = info[0].As().Int32Value(); + this->instance->setColumnCount(count); + return env.Null(); +} +Napi::Value QTableWidgetWrap::setRowCount(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int count = info[0].As().Int32Value(); + this->instance->setRowCount(count); + return env.Null(); +} Napi::Value QTableWidgetWrap::setSortingEnabled( const Napi::CallbackInfo& info) { diff --git a/src/demo.ts b/src/demo.ts index f87c80b4b..958a86242 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -1,15 +1,9 @@ -import { QTime } from '.'; -import { DateFormat } from './lib/QtEnums'; - -//const date = QDate.fromString('04132020', 'MMddyyyy'); -const { QMainWindow, QTreeWidgetItem, QTreeWidget, QDate, ItemDataRole, QDateTime } = require('./index'); +import { QMainWindow, QTableWidget, QTableWidgetItem, QWidget, QBoxLayout } from '.'; +import { QPushButton } from './lib/QtWidgets/QPushButton'; const win = new QMainWindow(); win.resize(500, 500); -const tree = new QTreeWidget(); -tree.setSortingEnabled(true); -tree.setHeaderLabels(['Date', 'Time', 'Test Column']); -tree.setColumnWidth(1, 15); //Sets the size of the selected column (index, size). +const table = new QTableWidget(0, 0); const dates = [ '11/22/1973 02:55:43 AM', @@ -37,14 +31,41 @@ const dates = [ '11/07/1964 04:43:42 PM', '03/26/1957 06:40:36 AM', ]; -for (const date of dates) { - const item = new QTreeWidgetItem(); - const dateObject = QDate.fromString(date.split(' ')[0], 'MM/dd/yyyy'); - const timeObject = QTime.fromString(date.split(' ')[1] + ' ' + date.split(' ')[2], 'hh:mm:ss AP'); - item.setData(0, ItemDataRole.DisplayRole, dateObject.native); - item.setData(1, ItemDataRole.DisplayRole, timeObject.native); - tree.addTopLevelItem(item); -} -win.setCentralWidget(tree); + +table.setColumnCount(2); +table.setRowCount(dates.length); +table.setHorizontalHeaderLabels(['Date', 'Time']); + +const buildDateStrings = (date: string) => { + const dateString = date.split(' ')[0]; + const timeString = date.split(' ')[1] + ' ' + date.split(' ')[2]; + return [dateString, timeString]; +}; + +dates.forEach((date, row) => { + const [dateString, timeString] = buildDateStrings(date); + table.setItem(row, 0, new QTableWidgetItem(dateString)); + table.setItem(row, 1, new QTableWidgetItem(timeString)); +}); + +const centralWidget = new QWidget(); +const boxLayout = new QBoxLayout(0); + +const button = new QPushButton(); +button.setText('Add row'); +button.addEventListener('clicked', () => { + const rowCount = table.rowCount(); + table.setRowCount(rowCount + 1); + + const date = new Date().toDateString(); + const [dateString, timeString] = buildDateStrings(date); + table.setItem(rowCount, 0, new QTableWidgetItem(dateString)); + table.setItem(rowCount, 1, new QTableWidgetItem(timeString)); +}); +boxLayout.addWidget(table); +boxLayout.addWidget(button); +centralWidget.setLayout(boxLayout); + +win.setCentralWidget(centralWidget); win.show(); (global as any).win = win; diff --git a/src/lib/QtWidgets/QTableWidget.ts b/src/lib/QtWidgets/QTableWidget.ts index 85006ee0d..865e5a2a5 100644 --- a/src/lib/QtWidgets/QTableWidget.ts +++ b/src/lib/QtWidgets/QTableWidget.ts @@ -153,6 +153,18 @@ export class QTableWidget extends QAbstractScrollArea { setRowHeight(row: number, height: number): void { this.native.setRowHeight(row, height); } + columnCount(): number { + return this.native.columnCount(); + } + rowCount(): number { + return this.native.rowCount(); + } + setColumnCount(count: number): void { + this.native.setColumnCount(count); + } + setRowCount(count: number): void { + this.native.setRowCount(count); + } setSortingEnabled(enable: boolean): void { this.native.setSortingEnabled(enable); }