diff --git a/tests/app/ui/layouts/grid-layout-tests.ts b/tests/app/ui/layouts/grid-layout-tests.ts index c286121a5..6d80c7925 100644 --- a/tests/app/ui/layouts/grid-layout-tests.ts +++ b/tests/app/ui/layouts/grid-layout-tests.ts @@ -183,6 +183,121 @@ export class GridLayoutTest extends testModule.UITest GridLayout.setColumnSpan(new Button(), 0); } + public test_addChildAtCell_with_all_params() { + let btn = new Button(); + let row: number = 1; + let column: number = 2; + let rowSpan: number = 3; + let columnSpan: number = 4; + this.testView.addChildAtCell(btn, row, column, rowSpan, columnSpan); + TKUnit.assertEqual( + this.row(btn), + row, + "'row' property not applied For GridLayout addChildAtCell." + ); + TKUnit.assertEqual( + this.col(btn), + column, + "'column' property not applied For GridLayout addChildAtCell." + ); + TKUnit.assertEqual( + this.rowSpan(btn), + rowSpan, + "'rowSpan' property not applied For GridLayout addChildAtCell." + ); + TKUnit.assertEqual( + this.colSpan(btn), + columnSpan, + "'columnSpan' property not applied For GridLayout addChildAtCell." + ); + } + + public test_addChildAtCell_without_optional_params() { + let btn = new Button(); + let row: number = 1; + let column: number = 2; + let defaultSpanValue: number = 1; + this.testView.addChildAtCell(btn, row, column); + TKUnit.assertEqual( + this.row(btn), + row, + "'row' property not applied For GridLayout addChildAtCell." + ); + TKUnit.assertEqual( + this.col(btn), + column, + "'column' property not applied For GridLayout addChildAtCell." + ); + TKUnit.assertEqual( + this.rowSpan(btn), + defaultSpanValue, + "'rowSpan' property not applied For GridLayout addChildAtCell without optional params." + ); + TKUnit.assertEqual( + this.colSpan(btn), + defaultSpanValue, + "'colSpan' property not applied For GridLayout addChildAtCell without optional params." + ); + } + + public test_addChildAtCell_without_rowSpan() { + let btn = new Button(); + let row: number = 1; + let column: number = 2; + let columnSpan: number = 2; + let defaultSpanValue: number = 1; + this.testView.addChildAtCell(btn, row, column, undefined, columnSpan); + TKUnit.assertEqual( + this.row(btn), + row, + "'row' property not applied For GridLayout addChildAtCell without rowspan." + ); + TKUnit.assertEqual( + this.col(btn), + column, + "'column' property not applied For GridLayout addChildAtCell without rowspan." + ); + TKUnit.assertEqual( + this.rowSpan(btn), + defaultSpanValue, + "'rowSpan' property not applied For GridLayout addChildAtCell without rowspan." + ); + TKUnit.assertEqual( + this.colSpan(btn), + columnSpan, + "'columnSpan' property not applied For GridLayout addChildAtCell without rowspan." + ); + } + + public test_addChildAtCell_without_columnSpan() { + let btn = new Button(); + let row: number = 1; + let column: number = 2; + let rowSpan: number = 2; + let defaultSpanValue: number = 1; + this.testView.addChildAtCell(btn, row, column, rowSpan); + TKUnit.assertEqual( + this.row(btn), + row, + "'row' property not applied For GridLayout addChildAtCell without columnSpan." + ); + TKUnit.assertEqual( + this.col(btn), + column, + "'column' property not applied For GridLayout addChildAtCell without columnSpan." + ); + TKUnit.assertEqual( + this.rowSpan(btn), + rowSpan, + "'rowSpan' property not applied For GridLayout addChildAtCell without columnSpan." + ); + TKUnit.assertEqual( + this.colSpan(btn), + defaultSpanValue, + "'columnSpan' property not applied For GridLayout addChildAtCell without columnSpan." + ); + } + public test_addRow_shouldThrow_onNullValues() { TKUnit.assertThrows(() => { this.testView.addRow(null); diff --git a/tns-core-modules/ui/layouts/grid-layout/grid-layout-common.ts b/tns-core-modules/ui/layouts/grid-layout/grid-layout-common.ts index 13bddb726..0f2bef6ac 100644 --- a/tns-core-modules/ui/layouts/grid-layout/grid-layout-common.ts +++ b/tns-core-modules/ui/layouts/grid-layout/grid-layout-common.ts @@ -178,6 +178,18 @@ export class GridLayoutBase extends LayoutBase implements GridLayoutDefinition { this.invalidate(); } + public addChildAtCell(view: View, row: number, column: number, rowSpan?: number, columnSpan?: number): void { + this.addChild(view); + GridLayoutBase.setRow(view, row); + GridLayoutBase.setColumn(view, column); + if (rowSpan) { + GridLayoutBase.setRowSpan(view, rowSpan); + } + if (columnSpan) { + GridLayoutBase.setColumnSpan(view, columnSpan); + } + } + public removeRow(itemSpec: ItemSpec): void { if (!itemSpec) { throw new Error("Value is null."); diff --git a/tns-core-modules/ui/layouts/grid-layout/grid-layout.d.ts b/tns-core-modules/ui/layouts/grid-layout/grid-layout.d.ts index 8cce693d6..ba6b32926 100644 --- a/tns-core-modules/ui/layouts/grid-layout/grid-layout.d.ts +++ b/tns-core-modules/ui/layouts/grid-layout/grid-layout.d.ts @@ -101,6 +101,11 @@ export class GridLayout extends LayoutBase { */ public addRow(itemSpec: ItemSpec): void; + /** + * Adds a child at specific cell in GridLayout. Optional rowSpan and columnSpan attributes + */ + public addChildAtCell(view: View, row: number, column: number, rowSpan?: number, columnSpan?: number): void; + /** * Removes a column specification from a GridLayout. */