]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed Window to support empty content (#10325) 88/388/3
authorArtur Signell <artur@vaadin.com>
Mon, 26 Nov 2012 18:27:02 +0000 (20:27 +0200)
committerVaadin Code Review <review@vaadin.com>
Tue, 27 Nov 2012 09:55:40 +0000 (09:55 +0000)
Change-Id: I90a5f4e4011452f07e4bea2cef2207ad8635cd31

client/src/com/vaadin/client/ui/VWindow.java
client/src/com/vaadin/client/ui/window/WindowConnector.java
uitest/src/com/vaadin/tests/components/ui/EmptyWindow.html [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/ui/EmptyWindow.java [new file with mode: 0644]

index 1b35b020f2914f298db5e48ccead1f2d7025c91c..dc64eb75298d857b26112d5c4d5242085b668d1e 100644 (file)
@@ -39,7 +39,6 @@ import com.google.gwt.user.client.ui.HasWidgets;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.client.ApplicationConnection;
 import com.vaadin.client.BrowserInfo;
-import com.vaadin.client.ComponentConnector;
 import com.vaadin.client.ConnectorMap;
 import com.vaadin.client.Console;
 import com.vaadin.client.Focusable;
@@ -78,9 +77,6 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
 
     public static final int Z_INDEX = 10000;
 
-    /** For internal use only. May be removed or replaced in the future. */
-    public ComponentConnector layout;
-
     /** For internal use only. May be removed or replaced in the future. */
     public Element contents;
 
@@ -742,16 +738,17 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
     }
 
     private void updateContentsSize() {
+        Widget childWidget = getWidget();
+
         // Update child widget dimensions
-        if (client != null) {
-            Widget childWidget = layout.getWidget();
+        if (client != null && childWidget != null) {
             client.handleComponentRelativeSize(childWidget);
             if (childWidget instanceof HasWidgets) {
                 client.runDescendentsLayout((HasWidgets) childWidget);
             }
         }
 
-        LayoutManager layoutManager = LayoutManager.get(client);
+        LayoutManager layoutManager = getLayoutManager();
         layoutManager.setNeedsMeasure(ConnectorMap.get(client).getConnector(
                 this));
         layoutManager.layoutNow();
@@ -939,18 +936,22 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
     }
 
     private int getDecorationHeight() {
-        LayoutManager lm = layout.getLayoutManager();
+        LayoutManager lm = getLayoutManager();
         int headerHeight = lm.getOuterHeight(header);
         int footerHeight = lm.getOuterHeight(footer);
         return headerHeight + footerHeight;
     }
 
+    private LayoutManager getLayoutManager() {
+        return LayoutManager.get(client);
+    }
+
     public int getMinWidth() {
         return MIN_CONTENT_AREA_WIDTH + getDecorationWidth();
     }
 
     private int getDecorationWidth() {
-        LayoutManager layoutManager = layout.getLayoutManager();
+        LayoutManager layoutManager = getLayoutManager();
         return layoutManager.getOuterWidth(getElement())
                 - contentPanel.getElement().getOffsetWidth();
     }
index 4f1825e749b2fb5bd1beee99da75f5ac45d88123..a2bac218f446789b212f632e90c5629c9d1fb734 100644 (file)
@@ -212,7 +212,6 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector
     @Override
     public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
         // We always have 1 child, unless the child is hidden
-        getWidget().layout = getContent();
         getWidget().contentPanel.setWidget(getContentWidget());
     }
 
@@ -220,12 +219,13 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector
     public void layout() {
         LayoutManager lm = getLayoutManager();
         VWindow window = getWidget();
-        ComponentConnector layout = window.layout;
+        ComponentConnector content = getContent();
+        boolean hasContent = (content != null);
         Element contentElement = window.contentPanel.getElement();
 
         if (!minWidthChecked) {
-            boolean needsMinWidth = !isUndefinedWidth()
-                    || layout.isRelativeWidth();
+            boolean needsMinWidth = !isUndefinedWidth() || !hasContent
+                    || content.isRelativeWidth();
             int minWidth = window.getMinWidth();
             if (needsMinWidth && lm.getInnerWidth(contentElement) < minWidth) {
                 minWidthChecked = true;
@@ -235,8 +235,8 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector
             minWidthChecked = true;
         }
 
-        boolean needsMinHeight = !isUndefinedHeight()
-                || layout.isRelativeHeight();
+        boolean needsMinHeight = !isUndefinedHeight() || !hasContent
+                || content.isRelativeHeight();
         int minHeight = window.getMinHeight();
         if (needsMinHeight && lm.getInnerHeight(contentElement) < minHeight) {
             // Use minimum height if less than a certain size
@@ -259,26 +259,29 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector
          * otherwise not take the scrollbar into account when calculating the
          * height.
          */
-        Element layoutElement = layout.getWidget().getElement();
-        Style childStyle = layoutElement.getStyle();
-        if (layout.isRelativeHeight() && !BrowserInfo.get().isIE9()) {
-            childStyle.setPosition(Position.ABSOLUTE);
-
-            Style wrapperStyle = contentElement.getStyle();
-            if (window.getElement().getStyle().getWidth().length() == 0
-                    && !layout.isRelativeWidth()) {
-                /*
-                 * Need to lock width to make undefined width work even with
-                 * absolute positioning
-                 */
-                int contentWidth = lm.getOuterWidth(layoutElement);
-                wrapperStyle.setWidth(contentWidth, Unit.PX);
+        if (hasContent) {
+            Element layoutElement = content.getWidget().getElement();
+            Style childStyle = layoutElement.getStyle();
+            if (content.isRelativeHeight() && !BrowserInfo.get().isIE9()) {
+                childStyle.setPosition(Position.ABSOLUTE);
+
+                Style wrapperStyle = contentElement.getStyle();
+                if (window.getElement().getStyle().getWidth().length() == 0
+                        && !content.isRelativeWidth()) {
+                    /*
+                     * Need to lock width to make undefined width work even with
+                     * absolute positioning
+                     */
+                    int contentWidth = lm.getOuterWidth(layoutElement);
+                    wrapperStyle.setWidth(contentWidth, Unit.PX);
+                } else {
+                    wrapperStyle.clearWidth();
+                }
             } else {
-                wrapperStyle.clearWidth();
+                childStyle.clearPosition();
             }
-        } else {
-            childStyle.clearPosition();
         }
+
     }
 
     @Override
diff --git a/uitest/src/com/vaadin/tests/components/ui/EmptyWindow.html b/uitest/src/com/vaadin/tests/components/ui/EmptyWindow.html
new file mode 100644 (file)
index 0000000..cc7b075
--- /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://arturwin.office.itmill.com: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.ui.EmptyWindow?restartApplication</td>
+       <td></td>
+</tr>
+<tr>
+       <td>screenCapture</td>
+       <td></td>
+       <td>emptyWindow</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/ui/EmptyWindow.java b/uitest/src/com/vaadin/tests/components/ui/EmptyWindow.java
new file mode 100644 (file)
index 0000000..c397592
--- /dev/null
@@ -0,0 +1,26 @@
+package com.vaadin.tests.components.ui;\r
+\r
+import com.vaadin.server.VaadinRequest;\r
+import com.vaadin.tests.components.AbstractTestUI;\r
+import com.vaadin.ui.Label;\r
+import com.vaadin.ui.Window;\r
+\r
+public class EmptyWindow extends AbstractTestUI {\r
+\r
+    @Override\r
+    protected void setup(VaadinRequest request) {\r
+        addWindow(new Window("My empty window"));\r
+        setContent(new Label("UI"));\r
+    }\r
+\r
+    @Override\r
+    protected String getTestDescription() {\r
+        return "There should be an empty window on the screen. Currently it should have the min width defined in VWindow";\r
+    }\r
+\r
+    @Override\r
+    protected Integer getTicketNumber() {\r
+        return 10325;\r
+    }\r
+\r
+}\r