Implemented QGridLayout property accessors (#598)

* Implemented QGridLayout property accessors

* Remove unnecessary demo code

* Minor formatting changes
This commit is contained in:
Adam Gastineau 2020-06-09 07:15:02 -07:00 committed by GitHub
parent ad134527d4
commit 4ea054084c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 241 additions and 58 deletions

View File

@ -24,4 +24,18 @@ class DLL_EXPORT QGridLayoutWrap : public Napi::ObjectWrap<QGridLayoutWrap> {
// 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);
};

View File

@ -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<Napi::Number>().Int32Value();
int value = static_cast<int>(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<Napi::Number>().Int32Value();
int value = static_cast<int>(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<Napi::Number>().Int32Value();
int stretch = info[1].As<Napi::Number>().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<Napi::Number>().Int32Value();
int stretch = info[1].As<Napi::Number>().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<Napi::Number>().Int32Value();
int value = static_cast<int>(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<Napi::Number>().Int32Value();
int value = static_cast<int>(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<Napi::Number>().Int32Value();
int minSize = info[1].As<Napi::Number>().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<Napi::Number>().Int32Value();
int minSize = info[1].As<Napi::Number>().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<int>(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<int>(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<Napi::Number>().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<Napi::Number>().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<int>(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<int>(this->instance->rowCount());
return Napi::Number::From(env, value);
}

View File

@ -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;

View File

@ -51,6 +51,48 @@ export class QGridLayout extends NodeLayout<QGridLayoutSignals> {
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;