You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2008/10/24 08:58:15 UTC
svn commit: r707566 - in /myfaces/tobago/trunk/core/src:
main/java/org/apache/myfaces/tobago/layout/
main/java/org/apache/myfaces/tobago/layout/grid/
main/java/org/apache/myfaces/tobago/layout/math/
test/java/org/apache/myfaces/tobago/layout/ test/java...
Author: lofwyr
Date: Thu Oct 23 23:58:14 2008
New Revision: 707566
URL: http://svn.apache.org/viewvc?rev=707566&view=rev
Log:
TOBAGO-606: Layout
* setting computed values from the equation system to the components
Added:
myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ComponentImpl.java (contents, props changed)
- copied, changed from r707095, myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ComponentImpl.java
myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ContainerImpl.java (contents, props changed)
- copied, changed from r707095, myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ContainerImpl.java
Removed:
myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ComponentImpl.java
myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ContainerImpl.java
Modified:
myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutContext.java
myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutManager.java
myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridConstraints.java
myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManager.java
myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/math/EquationManager.java
myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManagerUnitTest.java
myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/math/EquationManagerUnitTest.java
Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutContext.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutContext.java?rev=707566&r1=707565&r2=707566&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutContext.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutContext.java Thu Oct 23 23:58:14 2008
@@ -17,16 +17,23 @@
* limitations under the License.
*/
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.tobago.layout.grid.GridConstraints;
import org.apache.myfaces.tobago.layout.math.EquationManager;
public class LayoutContext {
+ private static final Log LOG = LogFactory.getLog(LayoutContext.class);
+
private EquationManager horizontal;
private EquationManager vertical;
+ private Container container;
- public LayoutContext() {
- horizontal = new EquationManager();
- vertical = new EquationManager();
+ public LayoutContext(Container container) {
+ this.horizontal = new EquationManager();
+ this.vertical = new EquationManager();
+ this.container = container;
}
public EquationManager getHorizontal() {
@@ -36,4 +43,25 @@
public EquationManager getVertical() {
return vertical;
}
+
+ public void layout() {
+
+ horizontal.setFixedLength(0, ((GridConstraints)container.getConstraints()).getWidth().getPixel());
+ vertical.setFixedLength(0, ((GridConstraints)container.getConstraints()).getHeight().getPixel());
+
+ horizontal.descend(0, 1);
+ vertical.descend(0, 1);
+ container.getLayoutManager().collect(this, container);
+ horizontal.ascend();
+ vertical.ascend();
+
+ horizontal.solve();
+ vertical.solve();
+
+ horizontal.descend(0, 1);
+ vertical.descend(0, 1);
+ container.getLayoutManager().distribute(this, container);
+ horizontal.ascend();
+ vertical.ascend();
+ }
}
Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutManager.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutManager.java?rev=707566&r1=707565&r2=707566&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutManager.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/LayoutManager.java Thu Oct 23 23:58:14 2008
@@ -19,5 +19,7 @@
public interface LayoutManager {
- void layout(LayoutContext layoutContext, Container container);
+ void collect(LayoutContext layoutContext, Container container);
+
+ void distribute(LayoutContext layoutContext, Container container);
}
Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridConstraints.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridConstraints.java?rev=707566&r1=707565&r2=707566&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridConstraints.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridConstraints.java Thu Oct 23 23:58:14 2008
@@ -20,6 +20,7 @@
import org.apache.myfaces.tobago.layout.Component;
import org.apache.myfaces.tobago.layout.Constraints;
import org.apache.myfaces.tobago.layout.Dimension;
+import org.apache.myfaces.tobago.layout.Measure;
/*
* User: lofwyr
@@ -37,6 +38,10 @@
private Dimension maximumSize; // TODO = new Dimension();
+ private Measure width;
+
+ private Measure height;
+
/**
* Convenience method to get the correct layout constraints from the component.
* If the constraints object doesn't exists it will be created a default and set to the component.
@@ -90,4 +95,20 @@
public void setMaximumSize(Dimension maximumSize) {
this.maximumSize = maximumSize;
}
+
+ public Measure getWidth() {
+ return width;
+ }
+
+ public void setWidth(Measure width) {
+ this.width = width;
+ }
+
+ public Measure getHeight() {
+ return height;
+ }
+
+ public void setHeight(Measure height) {
+ this.height = height;
+ }
}
Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManager.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManager.java?rev=707566&r1=707565&r2=707566&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManager.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManager.java Thu Oct 23 23:58:14 2008
@@ -26,6 +26,7 @@
import org.apache.myfaces.tobago.layout.LayoutToken;
import org.apache.myfaces.tobago.layout.LayoutTokens;
import org.apache.myfaces.tobago.layout.PixelLayoutToken;
+import org.apache.myfaces.tobago.layout.PixelMeasure;
import org.apache.myfaces.tobago.layout.RelativeLayoutToken;
import org.apache.myfaces.tobago.layout.math.EquationManager;
@@ -75,7 +76,7 @@
LOG.info("rows = " + Arrays.toString(grid.getRows()));
}
*/
- public void layout(LayoutContext layoutContext, Container container) {
+ public void collect(LayoutContext layoutContext, Container container) {
List<Component> components = container.getComponents();
@@ -99,7 +100,7 @@
EquationManager vertial = layoutContext.getVertical();
horizontal.descend(i, cell.getColumnSpan());
vertial.descend(j, cell.getRowSpan());
- layoutManager.layout(layoutContext, subContainer);
+ layoutManager.collect(layoutContext, subContainer);
horizontal.ascend();
vertial.ascend();
}
@@ -108,6 +109,34 @@
}
}
+ public void distribute(LayoutContext layoutContext, Container container) {
+
+ for (int i = 0; i < grid.getColumnCount(); i++) {
+ for (int j = 0; j < grid.getRowCount(); j++) {
+ Cell temp = grid.get(i, j);
+ if (temp instanceof RealCell) {
+ RealCell cell = (RealCell) temp;
+ Component component = temp.getComponent();
+ EquationManager horizontal = layoutContext.getHorizontal();
+ EquationManager vertial = layoutContext.getVertical();
+ horizontal.descend(i, cell.getColumnSpan());
+ vertial.descend(j, cell.getRowSpan());
+
+ ((GridConstraints) component.getConstraints()).setWidth(new PixelMeasure((int) horizontal.getValue()));
+ ((GridConstraints) component.getConstraints()).setHeight(new PixelMeasure((int) vertial.getValue()));
+
+ if (component instanceof Container) {
+ Container subContainer = (Container) component;
+ LayoutManager layoutManager = subContainer.getLayoutManager();
+ layoutManager.distribute(layoutContext, subContainer);
+ }
+ horizontal.ascend();
+ vertial.ascend();
+ }
+ }
+ }
+ }
+
private void registerVariables(LayoutContext layoutContext) {
// horizontal
layoutContext.getHorizontal().addSubTree(columnTokens.getSize());
Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/math/EquationManager.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/math/EquationManager.java?rev=707566&r1=707565&r2=707566&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/math/EquationManager.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/math/EquationManager.java Thu Oct 23 23:58:14 2008
@@ -29,6 +29,7 @@
private SystemOfEquations equations;
private Node current;
+ private double[] result;
public EquationManager() {
equations = new SystemOfEquations(0);
@@ -73,10 +74,23 @@
new ProportionEquation(getIndexOfVariable(index1), getIndexOfVariable(index2), factor1, factor2));
}
- public double[] solve() {
+ public void solve() {
equations.prepare();
equations.gauss();
equations.step2();
- return equations.result();
+ result = equations.result();
+ }
+
+ public double getValue() {
+ assert result != null;
+ double sum = 0.0;
+ for (int i = 0; i < current.getSpan(); i++) {
+ sum += result[current.getIndexOfVariable() + i];
+ }
+ return sum;
+ }
+
+ public double[] getResult() {
+ return result;
}
}
Copied: myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ComponentImpl.java (from r707095, myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ComponentImpl.java)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ComponentImpl.java?p2=myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ComponentImpl.java&p1=myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ComponentImpl.java&r1=707095&r2=707566&rev=707566&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ComponentImpl.java (original)
+++ myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ComponentImpl.java Thu Oct 23 23:58:14 2008
@@ -1,5 +1,7 @@
package org.apache.myfaces.tobago.layout;
+import org.apache.myfaces.tobago.layout.grid.GridConstraints;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -24,6 +26,10 @@
private Constraints constraints;
+ public ComponentImpl() {
+ constraints = new GridConstraints();
+ }
+
public Constraints getConstraints() {
return constraints;
}
Propchange: myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ComponentImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ComponentImpl.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Copied: myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ContainerImpl.java (from r707095, myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ContainerImpl.java)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ContainerImpl.java?p2=myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ContainerImpl.java&p1=myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/layout/ContainerImpl.java&r1=707095&r2=707566&rev=707566&view=diff
==============================================================================
(empty)
Propchange: myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ContainerImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/ContainerImpl.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManagerUnitTest.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManagerUnitTest.java?rev=707566&r1=707565&r2=707566&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManagerUnitTest.java (original)
+++ myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/grid/GridLayoutManagerUnitTest.java Thu Oct 23 23:58:14 2008
@@ -25,8 +25,8 @@
import org.apache.myfaces.tobago.layout.Container;
import org.apache.myfaces.tobago.layout.ContainerImpl;
import org.apache.myfaces.tobago.layout.LayoutContext;
+import org.apache.myfaces.tobago.layout.PixelMeasure;
import org.apache.myfaces.tobago.layout.math.AssertUtils;
-import org.apache.myfaces.tobago.layout.math.EquationManager;
import java.util.Arrays;
@@ -36,6 +36,83 @@
/**
* <pre>
+ * | 300px |
+ * | * | 2* |
+ * <p/>
+ * +---------+----------+ -----
+ * | | | 20px
+ * +---------+----------+ -----
+ * </pre>
+ */
+ public void testSimple() {
+ Container container = new ContainerImpl();
+ ComponentImpl c1 = new ComponentImpl();
+ container.getComponents().add(c1);
+ ComponentImpl c2 = new ComponentImpl();
+ container.getComponents().add(c2);
+
+ GridLayoutManager manager = new GridLayoutManager("*;2*", "*");
+ container.setLayoutManager(manager);
+
+ ((GridConstraints) container.getConstraints()).setWidth(new PixelMeasure(300));
+ ((GridConstraints) container.getConstraints()).setHeight(new PixelMeasure(20));
+ LayoutContext layoutContext = new LayoutContext(container);
+ layoutContext.layout();
+
+ double[] result = layoutContext.getHorizontal().getResult();
+ LOG.info("result: " + Arrays.toString(result));
+ AssertUtils.assertEquals(new double[]{300, 100, 200}, result, 0.000001);
+
+ result = layoutContext.getVertical().getResult();
+ LOG.info("result: " + Arrays.toString(result));
+ AssertUtils.assertEquals(new double[]{20, 20}, result, 0.000001);
+
+ assertEquals("width of container", 300, ((GridConstraints) container.getConstraints()).getWidth().getPixel());
+ assertEquals("width of component 1", 100, ((GridConstraints) c1.getConstraints()).getWidth().getPixel());
+ assertEquals("width of component 2", 200, ((GridConstraints) c2.getConstraints()).getWidth().getPixel());
+ }
+
+ /**
+ * <pre>
+ * | 300px |
+ * | * | * | * |
+ * <p/>
+ * +---------+----------+---------+ -----
+ * | | | 20px
+ * +---------+----------+---------+ -----
+ * </pre>
+ */
+ public void testSpan() {
+ Container container = new ContainerImpl();
+ ComponentImpl c = new ComponentImpl();
+ container.getComponents().add(c);
+ ComponentImpl span = new ComponentImpl();
+ container.getComponents().add(span);
+ ((GridConstraints) span.getConstraints()).setColumnSpan(2);
+
+ GridLayoutManager manager = new GridLayoutManager("*;*;*", "*");
+ container.setLayoutManager(manager);
+
+ ((GridConstraints) container.getConstraints()).setWidth(new PixelMeasure(300));
+ ((GridConstraints) container.getConstraints()).setHeight(new PixelMeasure(20));
+ LayoutContext layoutContext = new LayoutContext(container);
+ layoutContext.layout();
+
+ double[] result = layoutContext.getHorizontal().getResult();
+ LOG.info("result: " + Arrays.toString(result));
+ AssertUtils.assertEquals(new double[]{300, 100, 100, 100}, result, 0.000001);
+
+ result = layoutContext.getVertical().getResult();
+ LOG.info("result: " + Arrays.toString(result));
+ AssertUtils.assertEquals(new double[]{20, 20}, result, 0.000001);
+
+ assertEquals("width of container", 300, ((GridConstraints) container.getConstraints()).getWidth().getPixel());
+ assertEquals("width of component", 100, ((GridConstraints) c.getConstraints()).getWidth().getPixel());
+ assertEquals("width of span", 200, ((GridConstraints) span.getConstraints()).getWidth().getPixel());
+ }
+
+ /**
+ * <pre>
* | 800px |
* | * | 2* | 500px |
* | | | 7* | 3* |
@@ -51,11 +128,11 @@
* +---------+----------+--------+--------+ ----- ----- -----
* </pre>
*/
- public void test() {
+ public void testSpanAndSubLayout() {
Container container = new ContainerImpl();
Component span = new ComponentImpl();
GridConstraints bConstraint = GridConstraints.getConstraints(span);
- bConstraint.setRowSpan(2);
+ bConstraint.setColumnSpan(2);
container.getComponents().add(new ComponentImpl());
container.getComponents().add(span);
@@ -75,29 +152,22 @@
subContainer.getComponents().add(new ComponentImpl());
subContainer.getComponents().add(new ComponentImpl());
- LayoutContext layoutContext = new LayoutContext();
-
- EquationManager horizontal = layoutContext.getHorizontal();
- horizontal.setFixedLength(0, 800);
- horizontal.descend(0, 1);
-
- EquationManager vertial = layoutContext.getVertical();
- vertial.setFixedLength(0, 800);
- vertial.descend(0, 1);
-
- manager.layout(layoutContext, container);
-
- horizontal.ascend();
- vertial.ascend();
+ ((GridConstraints) container.getConstraints()).setWidth(new PixelMeasure(800));
+ ((GridConstraints) container.getConstraints()).setHeight(new PixelMeasure(800));
+ LayoutContext layoutContext = new LayoutContext(container);
+ layoutContext.layout();
- double[] result = layoutContext.getHorizontal().solve();
+ double[] result = layoutContext.getHorizontal().getResult();
LOG.info("result: " + Arrays.toString(result));
AssertUtils.assertEquals(new double[]{800, 100, 200, 500, 350, 150}, result, 0.000001);
- result = layoutContext.getVertical().solve();
+ result = layoutContext.getVertical().getResult();
LOG.info("result: " + Arrays.toString(result));
AssertUtils.assertEquals(new double[]{800, 200, 600, 300, 300}, result, 0.000001);
+
+ assertEquals("width of container", 800, ((GridConstraints) container.getConstraints()).getWidth().getPixel());
+ assertEquals("width of span", 700, ((GridConstraints) span.getConstraints()).getWidth().getPixel());
}
/**
@@ -128,29 +198,24 @@
span1.setLayoutManager(new GridLayoutManager("*;*;*", "*"));
span2.setLayoutManager(new GridLayoutManager("*;*;*", "*"));
- LayoutContext layoutContext = new LayoutContext();
-
- EquationManager horizontal = layoutContext.getHorizontal();
- horizontal.setFixedLength(0, 900);
- horizontal.descend(0, 1);
-
- EquationManager vertial = layoutContext.getVertical();
- vertial.setFixedLength(0, 200);
- vertial.descend(0, 1);
+ ((GridConstraints) container.getConstraints()).setWidth(new PixelMeasure(900));
+ ((GridConstraints) container.getConstraints()).setHeight(new PixelMeasure(200));
+ LayoutContext layoutContext = new LayoutContext(container);
+ layoutContext.layout();
- LOG.info(((GridLayoutManager)container.getLayoutManager()).getGrid());
- container.getLayoutManager().layout(layoutContext, container);
+ LOG.info(((GridLayoutManager) container.getLayoutManager()).getGrid());
- horizontal.ascend();
- vertial.ascend();
-
- double[] result = layoutContext.getHorizontal().solve();
+ double[] result = layoutContext.getHorizontal().getResult();
LOG.info("result: " + Arrays.toString(result));
AssertUtils.assertEquals(new double[]{900, 300, 300, 300, 200, 200, 200, 200, 200, 200}, result, 0.000001);
- result = layoutContext.getVertical().solve();
+ result = layoutContext.getVertical().getResult();
LOG.info("result: " + Arrays.toString(result));
AssertUtils.assertEquals(new double[]{200, 100, 100, 100, 100}, result, 0.000001);
+
+ assertEquals("width of container", 900, ((GridConstraints) container.getConstraints()).getWidth().getPixel());
+ assertEquals("width of span 1", 600, ((GridConstraints) span1.getConstraints()).getWidth().getPixel());
+ assertEquals("width of span 2", 600, ((GridConstraints) span2.getConstraints()).getWidth().getPixel());
}
}
Modified: myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/math/EquationManagerUnitTest.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/math/EquationManagerUnitTest.java?rev=707566&r1=707565&r2=707566&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/math/EquationManagerUnitTest.java (original)
+++ myfaces/tobago/trunk/core/src/test/java/org/apache/myfaces/tobago/layout/math/EquationManagerUnitTest.java Thu Oct 23 23:58:14 2008
@@ -61,8 +61,8 @@
equationManager.ascend();
- double[] result = equationManager.solve();
-
+ equationManager.solve();
+ double[] result = equationManager.getResult();
LOG.info("result: " + Arrays.toString(result));
AssertUtils.assertEquals(new double[]{600, 100, 200, 100, 200, 66.6666667, 133.3333333, 130, 70}, result, 0.000001);
}