diff --git a/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h b/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h index f6f355904..61ac1f19d 100644 --- a/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h @@ -24,4 +24,18 @@ class DLL_EXPORT QGridLayoutWrap : public Napi::ObjectWrap { // wrapped methods Napi::Value addWidget(const Napi::CallbackInfo& info); Napi::Value removeWidget(const Napi::CallbackInfo& info); + Napi::Value columnStretch(const Napi::CallbackInfo& info); + Napi::Value rowStretch(const Napi::CallbackInfo& info); + Napi::Value setColumnStretch(const Napi::CallbackInfo& info); + Napi::Value setRowStretch(const Napi::CallbackInfo& info); + Napi::Value columnMinimumWidth(const Napi::CallbackInfo& info); + Napi::Value rowMinimumHeight(const Napi::CallbackInfo& info); + Napi::Value setColumnMinimumWidth(const Napi::CallbackInfo& info); + Napi::Value setRowMinimumHeight(const Napi::CallbackInfo& info); + Napi::Value horizontalSpacing(const Napi::CallbackInfo& info); + Napi::Value verticalSpacing(const Napi::CallbackInfo& info); + Napi::Value setHorizontalSpacing(const Napi::CallbackInfo& info); + Napi::Value setVerticalSpacing(const Napi::CallbackInfo& info); + Napi::Value columnCount(const Napi::CallbackInfo& info); + Napi::Value rowCount(const Napi::CallbackInfo& info); }; diff --git a/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp b/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp index a95121258..1fc724693 100644 --- a/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp @@ -12,6 +12,25 @@ Napi::Object QGridLayoutWrap::init(Napi::Env env, Napi::Object exports) { env, CLASSNAME, {InstanceMethod("addWidget", &QGridLayoutWrap::addWidget), InstanceMethod("removeWidget", &QGridLayoutWrap::removeWidget), + InstanceMethod("columnStretch", &QGridLayoutWrap::columnStretch), + InstanceMethod("rowStretch", &QGridLayoutWrap::rowStretch), + InstanceMethod("setColumnStretch", &QGridLayoutWrap::setColumnStretch), + InstanceMethod("setRowStretch", &QGridLayoutWrap::setRowStretch), + InstanceMethod("columnMinimumWidth", + &QGridLayoutWrap::columnMinimumWidth), + InstanceMethod("rowMinimumHeight", &QGridLayoutWrap::rowMinimumHeight), + InstanceMethod("setColumnMinimumWidth", + &QGridLayoutWrap::setColumnMinimumWidth), + InstanceMethod("setRowMinimumHeight", + &QGridLayoutWrap::setRowMinimumHeight), + InstanceMethod("horizontalSpacing", &QGridLayoutWrap::horizontalSpacing), + InstanceMethod("verticalSpacing", &QGridLayoutWrap::verticalSpacing), + InstanceMethod("setHorizontalSpacing", + &QGridLayoutWrap::setHorizontalSpacing), + InstanceMethod("setVerticalSpacing", + &QGridLayoutWrap::setVerticalSpacing), + InstanceMethod("columnCount", &QGridLayoutWrap::columnCount), + InstanceMethod("rowCount", &QGridLayoutWrap::rowCount), QLAYOUT_WRAPPED_METHODS_EXPORT_DEFINE(QGridLayoutWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); @@ -67,3 +86,134 @@ Napi::Value QGridLayoutWrap::removeWidget(const Napi::CallbackInfo& info) { this->instance->removeWidget(widget->getInternalInstance()); return env.Null(); } + +Napi::Value QGridLayoutWrap::columnStretch(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int column = info[0].As().Int32Value(); + int value = static_cast(this->instance->columnStretch(column)); + return Napi::Number::From(env, value); +} + +Napi::Value QGridLayoutWrap::rowStretch(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int row = info[0].As().Int32Value(); + int value = static_cast(this->instance->rowStretch(row)); + return Napi::Number::From(env, value); +} + +Napi::Value QGridLayoutWrap::setColumnStretch(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int column = info[0].As().Int32Value(); + int stretch = info[1].As().Int32Value(); + this->instance->setColumnStretch(column, stretch); + return env.Null(); +} + +Napi::Value QGridLayoutWrap::setRowStretch(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int row = info[0].As().Int32Value(); + int stretch = info[1].As().Int32Value(); + this->instance->setRowStretch(row, stretch); + return env.Null(); +} + +Napi::Value QGridLayoutWrap::columnMinimumWidth( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int column = info[0].As().Int32Value(); + int value = static_cast(this->instance->columnMinimumWidth(column)); + return Napi::Number::From(env, value); +} + +Napi::Value QGridLayoutWrap::rowMinimumHeight(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int row = info[0].As().Int32Value(); + int value = static_cast(this->instance->rowMinimumHeight(row)); + return Napi::Number::From(env, value); +} + +Napi::Value QGridLayoutWrap::setColumnMinimumWidth( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int column = info[0].As().Int32Value(); + int minSize = info[1].As().Int32Value(); + this->instance->setColumnMinimumWidth(column, minSize); + return env.Null(); +} + +Napi::Value QGridLayoutWrap::setRowMinimumHeight( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int row = info[0].As().Int32Value(); + int minSize = info[1].As().Int32Value(); + this->instance->setRowMinimumHeight(row, minSize); + return env.Null(); +} + +Napi::Value QGridLayoutWrap::horizontalSpacing(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int value = static_cast(this->instance->horizontalSpacing()); + return Napi::Number::From(env, value); +} + +Napi::Value QGridLayoutWrap::verticalSpacing(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int value = static_cast(this->instance->verticalSpacing()); + return Napi::Number::From(env, value); +} + +Napi::Value QGridLayoutWrap::setHorizontalSpacing( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int spacing = info[0].As().Int32Value(); + this->instance->setHorizontalSpacing(spacing); + return env.Null(); +} + +Napi::Value QGridLayoutWrap::setVerticalSpacing( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int spacing = info[0].As().Int32Value(); + this->instance->setVerticalSpacing(spacing); + return env.Null(); +} + +Napi::Value QGridLayoutWrap::columnCount(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int value = static_cast(this->instance->columnCount()); + return Napi::Number::From(env, value); +} + +Napi::Value QGridLayoutWrap::rowCount(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + int value = static_cast(this->instance->rowCount()); + return Napi::Number::From(env, value); +} \ No newline at end of file diff --git a/src/demo.ts b/src/demo.ts index 958a86242..a536723ed 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -1,71 +1,48 @@ -import { QMainWindow, QTableWidget, QTableWidgetItem, QWidget, QBoxLayout } from '.'; -import { QPushButton } from './lib/QtWidgets/QPushButton'; +import { QMainWindow, QWidget } from '.'; +import { QGridLayout } from './lib/QtWidgets/QGridLayout'; +import { QLabel } from './lib/QtWidgets/QLabel'; const win = new QMainWindow(); win.resize(500, 500); -const table = new QTableWidget(0, 0); -const dates = [ - '11/22/1973 02:55:43 AM', - '02/10/1949 08:44:35 AM', - '02/06/1970 02:45:24 PM', - '02/15/1984 04:04:01 AM', - '03/02/1981 01:14:37 PM', - '12/24/1937 11:51:14 AM', - '01/01/2003 08:44:47 PM', - '08/10/1961 12:21:59 PM', - '07/14/1977 04:02:20 AM', - '11/23/1980 11:58:03 PM', - '03/01/1965 12:35:36 AM', - '03/04/1996 05:32:37 AM', - '07/11/1986 10:16:10 AM', - '04/13/1933 02:14:08 PM', - '03/28/1972 08:50:09 PM', - '06/18/1925 07:06:51 AM', - '04/22/2017 08:29:33 PM', - '01/12/1932 04:01:28 AM', - '10/07/2019 08:14:44 PM', - '10/27/1987 11:51:41 AM', - '06/09/2002 06:04:50 AM', - '12/31/1980 01:33:19 PM', - '11/07/1964 04:43:42 PM', - '03/26/1957 06:40:36 AM', -]; +const outer = new QWidget(); +const outerLayout = new QGridLayout(); +outer.setLayout(outerLayout); +outer.setInlineStyle('background-color: red'); +console.log(outerLayout.rowCount(), outerLayout.columnCount()); +outerLayout.setColumnStretch(0, 2); +outerLayout.setRowStretch(1, 2); +outerLayout.setColumnMinimumWidth(1, 200); +outerLayout.setRowMinimumHeight(0, 100); +outerLayout.setHorizontalSpacing(20); +outerLayout.setVerticalSpacing(50); -table.setColumnCount(2); -table.setRowCount(dates.length); -table.setHorizontalHeaderLabels(['Date', 'Time']); +console.log(outerLayout.columnStretch(0), outerLayout.columnStretch(1)); +console.log(outerLayout.rowMinimumHeight(0), outerLayout.rowMinimumHeight(1)); +console.log(outerLayout.verticalSpacing(), outerLayout.horizontalSpacing()); -const buildDateStrings = (date: string) => { - const dateString = date.split(' ')[0]; - const timeString = date.split(' ')[1] + ' ' + date.split(' ')[2]; - return [dateString, timeString]; -}; +const columnOne = new QLabel(); +columnOne.setText('One'); +columnOne.setInlineStyle('background-color: blue'); +outerLayout.addWidget(columnOne, 0, 0); -dates.forEach((date, row) => { - const [dateString, timeString] = buildDateStrings(date); - table.setItem(row, 0, new QTableWidgetItem(dateString)); - table.setItem(row, 1, new QTableWidgetItem(timeString)); -}); +const columnTwo = new QLabel(); +columnTwo.setText('Two'); +columnTwo.setInlineStyle('background-color: green'); +outerLayout.addWidget(columnTwo, 0, 1); -const centralWidget = new QWidget(); -const boxLayout = new QBoxLayout(0); +const columnThree = new QLabel(); +columnThree.setText('Three'); +columnThree.setInlineStyle('background-color: yellow'); +outerLayout.addWidget(columnThree, 1, 0); -const button = new QPushButton(); -button.setText('Add row'); -button.addEventListener('clicked', () => { - const rowCount = table.rowCount(); - table.setRowCount(rowCount + 1); +const columnFour = new QLabel(); +columnFour.setText('Four'); +columnFour.setInlineStyle('background-color: orange'); +outerLayout.addWidget(columnFour, 1, 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); +console.log(outerLayout.rowCount(), outerLayout.columnCount()); -win.setCentralWidget(centralWidget); +win.setCentralWidget(outer); win.show(); (global as any).win = win; diff --git a/src/lib/QtWidgets/QGridLayout.ts b/src/lib/QtWidgets/QGridLayout.ts index 7de0dbe53..50f1148fb 100644 --- a/src/lib/QtWidgets/QGridLayout.ts +++ b/src/lib/QtWidgets/QGridLayout.ts @@ -51,6 +51,48 @@ export class QGridLayout extends NodeLayout { this.native.removeWidget(widget.native); this.nodeChildren.delete(widget); } + columnStretch(column: number): number { + return this.native.columnStretch(column); + } + rowStretch(row: number): number { + return this.native.rowStretch(row); + } + setColumnStretch(column: number, stretch: number): void { + this.native.setColumnStretch(column, stretch); + } + setRowStretch(row: number, stretch: number): void { + this.native.setRowStretch(row, stretch); + } + columnMinimumWidth(column: number): number { + return this.native.columnMinimumWidth(column); + } + rowMinimumHeight(row: number): number { + return this.native.rowMinimumHeight(row); + } + setColumnMinimumWidth(column: number, minSize: number): void { + this.native.setColumnMinimumWidth(column, minSize); + } + setRowMinimumHeight(row: number, minSize: number): void { + this.native.setRowMinimumHeight(row, minSize); + } + horizontalSpacing(): number { + return this.native.horizontalSpacing(); + } + verticalSpacing(): number { + return this.native.verticalSpacing(); + } + setHorizontalSpacing(spacing: number): void { + this.native.setHorizontalSpacing(spacing); + } + setVerticalSpacing(spacing: number): void { + this.native.setVerticalSpacing(spacing); + } + columnCount(): number { + return this.native.columnCount(); + } + rowCount(): number { + return this.native.rowCount(); + } } export type QGridLayoutSignals = QLayoutSignals;