Change-Id: I90a5f4e4011452f07e4bea2cef2207ad8635cd31tags/7.0.0.beta11
@@ -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(); | |||
} |
@@ -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 |
@@ -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> |
@@ -0,0 +1,26 @@ | |||
package com.vaadin.tests.components.ui; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.Label; | |||
import com.vaadin.ui.Window; | |||
public class EmptyWindow extends AbstractTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
addWindow(new Window("My empty window")); | |||
setContent(new Label("UI")); | |||
} | |||
@Override | |||
protected String getTestDescription() { | |||
return "There should be an empty window on the screen. Currently it should have the min width defined in VWindow"; | |||
} | |||
@Override | |||
protected Integer getTicketNumber() { | |||
return 10325; | |||
} | |||
} |