Bug 447883 - Keep FX Renderer up to date
https://bugs.eclipse.org/bugs/show_bug.cgi?id=447883

Fixed renderer
diff --git a/bundles/javafx/org.eclipse.emf.ecp.view.horizontal.fx/src/org/eclipse/emf/ecp/view/horizontal/fx/HorizontalLayoutRendererFX.java b/bundles/javafx/org.eclipse.emf.ecp.view.horizontal.fx/src/org/eclipse/emf/ecp/view/horizontal/fx/HorizontalLayoutRendererFX.java
index 077e9f9..9f5ec57 100644
--- a/bundles/javafx/org.eclipse.emf.ecp.view.horizontal.fx/src/org/eclipse/emf/ecp/view/horizontal/fx/HorizontalLayoutRendererFX.java
+++ b/bundles/javafx/org.eclipse.emf.ecp.view.horizontal.fx/src/org/eclipse/emf/ecp/view/horizontal/fx/HorizontalLayoutRendererFX.java
@@ -1,7 +1,6 @@
 package org.eclipse.emf.ecp.view.horizontal.fx;
 
 import javafx.scene.Node;
-import javafx.scene.layout.ColumnConstraints;
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.Priority;
@@ -12,8 +11,8 @@
 import org.eclipse.emf.ecp.view.model.internal.fx.RendererFX;
 import org.eclipse.emf.ecp.view.model.internal.fx.RendererFactory;
 import org.eclipse.emf.ecp.view.spi.horizontal.model.VHorizontalLayout;
-import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
 import org.eclipse.emf.ecp.view.spi.model.VContainedContainer;
+import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
 import org.eclipse.emf.ecp.view.spi.model.VElement;
 import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
 import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException;
@@ -21,14 +20,6 @@
 public class HorizontalLayoutRendererFX extends RendererFX<VHorizontalLayout> {
 	private GridDescriptionFX gridDescription;
 
-	private void addColumnConstraint(GridPane grid) {
-
-		final ColumnConstraints column = new ColumnConstraints();
-		column.setPercentWidth(100);
-		column.setHgrow(Priority.ALWAYS);
-		grid.getColumnConstraints().add(column);
-	}
-
 	@Override
 	public GridDescriptionFX getGridDescription() {
 		if (gridDescription == null) {
@@ -39,7 +30,7 @@
 
 	@Override
 	protected Node renderNode(GridCellFX cell) throws NoRendererFoundException,
-		NoPropertyDescriptorFoundExeption {
+	NoPropertyDescriptorFoundExeption {
 		if (cell.getColumn() != 0) {
 			return null;
 		}
@@ -55,16 +46,13 @@
 			final GridDescriptionFX rendererGrid = compositeRenderer.getGridDescription();
 			final int rows = rendererGrid.getRows();
 			final int columns = rendererGrid.getColumns();
-			final ColumnConstraints cc = new ColumnConstraints();
-			cc.setHgrow(Priority.ALWAYS);
-			grid.getColumnConstraints().add(cc);
 
 			for (int i = 0; i < rows; i++) {
 				final HBox hBox = new HBox();
 				for (int j = 0; j < columns; j++) {
 					final Node node = compositeRenderer.render(rendererGrid.getGrid().get(i * columns + j));
 					hBox.getChildren().add(node);
-					if (columns == j - 1) {
+					if (columns - 1 == j) {
 						HBox.setHgrow(node, Priority.ALWAYS);
 					}
 				}
@@ -73,7 +61,6 @@
 				if (VContainedContainer.class.isInstance(composite)) {
 					GridPane.setVgrow(hBox, Priority.ALWAYS);
 				}
-				addColumnConstraint(grid);
 			}
 		}
 
diff --git a/bundles/javafx/org.eclipse.emf.ecp.view.model.fx/src/org/eclipse/emf/ecp/view/model/internal/fx/ContainerRendererFX.java b/bundles/javafx/org.eclipse.emf.ecp.view.model.fx/src/org/eclipse/emf/ecp/view/model/internal/fx/ContainerRendererFX.java
index f000b72..c65a353 100644
--- a/bundles/javafx/org.eclipse.emf.ecp.view.model.fx/src/org/eclipse/emf/ecp/view/model/internal/fx/ContainerRendererFX.java
+++ b/bundles/javafx/org.eclipse.emf.ecp.view.model.fx/src/org/eclipse/emf/ecp/view/model/internal/fx/ContainerRendererFX.java
@@ -5,8 +5,8 @@
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.Priority;
 
-import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
 import org.eclipse.emf.ecp.view.spi.model.VContainedContainer;
+import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
 import org.eclipse.emf.ecp.view.spi.model.VElement;
 import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
 import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException;
@@ -30,6 +30,17 @@
 		final GridPane grid = getGridPane();
 		final T element = getVElement();
 
+		int maxColumns = 1;
+		for (final VContainedElement composite : element.getChildren()) {
+			final RendererFX<VElement> compositeRenderer = RendererFactory.INSTANCE
+				.getRenderer(composite, getViewModelContext());
+			final GridDescriptionFX rendererGrid = compositeRenderer.getGridDescription();
+			final int columns = rendererGrid.getColumns();
+			if (columns > maxColumns) {
+				maxColumns = columns;
+			}
+		}
+
 		int gridRow = -1;
 		for (final VContainedElement composite : element.getChildren()) {
 			final RendererFX<VElement> compositeRenderer = RendererFactory.INSTANCE
@@ -51,6 +62,10 @@
 					if (VContainedContainer.class.isInstance(composite)) {
 						GridPane.setVgrow(node, Priority.ALWAYS);
 					}
+
+					if (j == columns - 1) {
+						GridPane.setColumnSpan(node, maxColumns - columns + 1);
+					}
 				}
 			}
 		}
diff --git a/bundles/javafx/org.eclipse.emf.ecp.view.model.fx/src/org/eclipse/emf/ecp/view/model/internal/fx/ViewRendererFX.java b/bundles/javafx/org.eclipse.emf.ecp.view.model.fx/src/org/eclipse/emf/ecp/view/model/internal/fx/ViewRendererFX.java
index 4a98da6..f00b77f 100644
--- a/bundles/javafx/org.eclipse.emf.ecp.view.model.fx/src/org/eclipse/emf/ecp/view/model/internal/fx/ViewRendererFX.java
+++ b/bundles/javafx/org.eclipse.emf.ecp.view.model.fx/src/org/eclipse/emf/ecp/view/model/internal/fx/ViewRendererFX.java
@@ -5,8 +5,8 @@
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.Priority;
 
-import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
 import org.eclipse.emf.ecp.view.spi.model.VContainedContainer;
+import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
 import org.eclipse.emf.ecp.view.spi.model.VElement;
 import org.eclipse.emf.ecp.view.spi.model.VView;
 import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
@@ -35,6 +35,17 @@
 		final GridPane grid = new GridPane();
 		grid.getStyleClass().add("vertical");
 
+		int maxColumns = 1;
+		for (final VContainedElement composite : vView.getChildren()) {
+			final RendererFX<VElement> compositeRenderer = RendererFactory.INSTANCE
+				.getRenderer(composite, getViewModelContext());
+			final GridDescriptionFX rendererGrid = compositeRenderer.getGridDescription();
+			final int columns = rendererGrid.getColumns();
+			if (columns > maxColumns) {
+				maxColumns = columns;
+			}
+		}
+
 		int gridRow = -1;
 		for (final VContainedElement composite : vView.getChildren()) {
 			final RendererFX<VElement> compositeRenderer = RendererFactory.INSTANCE
@@ -56,6 +67,10 @@
 					if (VContainedContainer.class.isInstance(composite)) {
 						GridPane.setVgrow(node, Priority.ALWAYS);
 					}
+
+					if (j == columns - 1) {
+						GridPane.setColumnSpan(node, maxColumns - columns + 1);
+					}
 				}
 			}
 		}