]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed middle vertical alignments in HorizontalLayout #10852
authorJohn Ahlroos <john@vaadin.com>
Tue, 5 Feb 2013 09:59:42 +0000 (11:59 +0200)
committerVaadin Code Review <review@vaadin.com>
Thu, 7 Feb 2013 13:57:17 +0000 (13:57 +0000)
Change-Id: I85dac7b89ec4ec670cf92e5c760090fbef5929af

client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.html [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.java [new file with mode: 0644]

index afe81c79a0907c8c4bb6e220ca79dc4531de2011..77def89e9e85a7db2be0dd75e5fc3fddc6742b93 100644 (file)
@@ -196,6 +196,12 @@ public abstract class AbstractOrderedLayoutConnector extends
      */
     private boolean hasChildrenWithRelativeHeight = false;
 
+    /**
+     * Keep track of whether any child is middle aligned. Used to determine if
+     * measurements are needed to make middle aligned children work.
+     */
+    private boolean hasChildrenWithMiddleAlignment = false;
+
     /**
      * Keeps track of whether slots should be expanded based on available space.
      */
@@ -340,6 +346,7 @@ public abstract class AbstractOrderedLayoutConnector extends
         processedResponseId = lastResponseId;
 
         hasChildrenWithRelativeHeight = false;
+        hasChildrenWithMiddleAlignment = false;
 
         needsExpand = getWidget().vertical ? !isUndefinedHeight()
                 : !isUndefinedWidth();
@@ -380,6 +387,10 @@ public abstract class AbstractOrderedLayoutConnector extends
                     getState().childData.get(child).alignmentBitmask);
             slot.setAlignment(alignment);
 
+            if (alignment.isVerticalCenter()) {
+                hasChildrenWithMiddleAlignment = true;
+            }
+
             double expandRatio = onlyZeroExpands ? 1 : getState().childData
                     .get(child).expandRatio;
 
@@ -429,8 +440,10 @@ public abstract class AbstractOrderedLayoutConnector extends
             return false;
         }
 
-        else if (!hasChildrenWithRelativeHeight) {
-            // Already works if there are no relative heights
+        else if (!hasChildrenWithRelativeHeight
+                && !hasChildrenWithMiddleAlignment) {
+            // Already works if there are no relative heights or middle aligned
+            // children
             return false;
         }
 
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.html b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.html
new file mode 100644 (file)
index 0000000..d16e4a3
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+    <td>open</td>
+    <td>/run/com.vaadin.tests.components.orderedlayout.HorizontalLayoutVerticalAlign?restartApplication</td>
+    <td></td>
+</tr>
+<tr>
+    <td>screenCapture</td>
+    <td></td>
+    <td>alignments</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.java b/uitest/src/com/vaadin/tests/components/orderedlayout/HorizontalLayoutVerticalAlign.java
new file mode 100644 (file)
index 0000000..4dc9d81
--- /dev/null
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.orderedlayout;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextArea;
+
+public class HorizontalLayoutVerticalAlign extends TestBase {
+
+    @Override
+    protected void setup() {
+        HorizontalLayout p = new HorizontalLayout();
+
+        p.addComponent(new TextArea());
+
+        Label top = new Label("top");
+        p.addComponent(top);
+        p.setComponentAlignment(top, Alignment.TOP_CENTER);
+
+        Label middle = new Label("middle");
+        p.addComponent(middle);
+        p.setComponentAlignment(middle, Alignment.MIDDLE_CENTER);
+
+        Label bottom = new Label("bottom");
+        p.addComponent(bottom);
+        p.setComponentAlignment(bottom, Alignment.BOTTOM_CENTER);
+
+        p.addComponent(new TextArea());
+
+        addComponent(p);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "Vertical alignments should be top-middle-bottom";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 10852;
+    }
+
+}