diff options
3 files changed, 103 insertions, 3 deletions
diff --git a/client/src/com/vaadin/client/ui/VAbstractSplitPanel.java b/client/src/com/vaadin/client/ui/VAbstractSplitPanel.java index 90f3e49ffb..e8732a4ca0 100644 --- a/client/src/com/vaadin/client/ui/VAbstractSplitPanel.java +++ b/client/src/com/vaadin/client/ui/VAbstractSplitPanel.java @@ -341,12 +341,16 @@ public class VAbstractSplitPanel extends ComplexPanel { } public void setSplitPosition(String pos) { + setSplitPosition(pos, true); + } + + private void setSplitPosition(String pos, boolean rememberPosition) { if (pos == null) { return; } pos = checkSplitPositionLimits(pos); - if (!pos.equals(position)) { + if (rememberPosition && !pos.equals(position)) { position = convertToPositionUnits(pos); } @@ -402,7 +406,8 @@ public class VAbstractSplitPanel extends ComplexPanel { if (pixelPosition < 0) { pixelPosition = 0; } - setSplitPosition(pixelPosition + "px"); + // Move splitter within bounds, but don't remember the new value + setSplitPosition(pixelPosition + "px", false); return; } @@ -450,7 +455,8 @@ public class VAbstractSplitPanel extends ComplexPanel { if (pixelPosition < 0) { pixelPosition = 0; } - setSplitPosition(pixelPosition + "px"); + // Move splitter within bounds, but don't remember the new value + setSplitPosition(pixelPosition + "px", false); return; } diff --git a/uitest/src/com/vaadin/tests/components/splitpanel/RetainSplitterPositionWhenOutOfBounds.html b/uitest/src/com/vaadin/tests/components/splitpanel/RetainSplitterPositionWhenOutOfBounds.html new file mode 100644 index 0000000000..dff4dbb996 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/splitpanel/RetainSplitterPositionWhenOutOfBounds.html @@ -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="" /> +<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.splitpanel.RetainSplitterPositionWhenOutOfBounds?restartApplication</td> + <td></td> +</tr> +<tr> + <td>screenCapture</td> + <td></td> + <td>middle-visible</td> +</tr> + +</tbody></table> +</body> +</html> diff --git a/uitest/src/com/vaadin/tests/components/splitpanel/RetainSplitterPositionWhenOutOfBounds.java b/uitest/src/com/vaadin/tests/components/splitpanel/RetainSplitterPositionWhenOutOfBounds.java new file mode 100644 index 0000000000..ee5a1a62e7 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/splitpanel/RetainSplitterPositionWhenOutOfBounds.java @@ -0,0 +1,67 @@ +/* + * Copyright 2012 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.tests.components.splitpanel; + +import com.vaadin.server.Sizeable; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.GridLayout; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.VerticalSplitPanel; + +public class RetainSplitterPositionWhenOutOfBounds extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + // Replacing default content to get the intended expansions + setContent(new MainLayout()); + } + + public class MainLayout extends GridLayout { + + public MainLayout() { + super(1, 3); + setSizeFull(); + + VerticalSplitPanel splitPanel = new VerticalSplitPanel(); + splitPanel.setFirstComponent(new Label("Top")); + splitPanel.setSecondComponent(new Label("Middle")); + splitPanel.setSplitPosition(50, Sizeable.Unit.PERCENTAGE); + + HorizontalLayout bottom = new HorizontalLayout(); + bottom.setWidth("100%"); + bottom.addComponent(new Label("Bottom")); + + addComponent(new Label(getTestDescription())); + addComponent(splitPanel); + addComponent(bottom); + } + + } + + @Override + protected String getTestDescription() { + return "The original splitter position value should be respected even if it's recalculated because it's of out bounds."; + } + + @Override + protected Integer getTicketNumber() { + return Integer.valueOf(10596); + } + +} |