diff options
author | Teemu Pòˆntelin <teemu@vaadin.com> | 2014-04-05 15:11:26 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2014-04-08 08:57:45 +0000 |
commit | 31f05d0001b6911fcac93bf09b0301dbf1385fa4 (patch) | |
tree | d4083f547f4989e200047d19563643a89fc8828b | |
parent | 49771e5a68316ff6cff1db57c328332988f24fb7 (diff) | |
download | vaadin-framework-31f05d0001b6911fcac93bf09b0301dbf1385fa4.tar.gz vaadin-framework-31f05d0001b6911fcac93bf09b0301dbf1385fa4.zip |
Slider handle is now correctly updated on resize (#12550)
Fixed the issue by replacing the legacy ContainerResizedListener
with adding (and removing) an ElementResizeListener to the
LayoutManager.
Notice also that after this change there are no longer
implementations of the deprecated ContainerResizedListener
in the framework codebase.
Change-Id: Ib984953d8b53b9535d39ae70166c17ffd5b4103b
4 files changed, 130 insertions, 3 deletions
diff --git a/client/src/com/vaadin/client/ui/VSlider.java b/client/src/com/vaadin/client/ui/VSlider.java index 44c2f2ddc8..7ac31fd85a 100644 --- a/client/src/com/vaadin/client/ui/VSlider.java +++ b/client/src/com/vaadin/client/ui/VSlider.java @@ -35,13 +35,12 @@ import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasValue; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.BrowserInfo; -import com.vaadin.client.ContainerResizedListener; import com.vaadin.client.Util; import com.vaadin.client.VConsole; import com.vaadin.shared.ui.slider.SliderOrientation; public class VSlider extends SimpleFocusablePanel implements Field, - ContainerResizedListener, HasValue<Double> { + HasValue<Double> { public static final String CLASSNAME = "v-slider"; @@ -432,7 +431,6 @@ public class VSlider extends SimpleFocusablePanel implements Field, } } - @Override public void iLayout() { if (isVertical()) { setHeight(); diff --git a/client/src/com/vaadin/client/ui/slider/SliderConnector.java b/client/src/com/vaadin/client/ui/slider/SliderConnector.java index 71462d69f0..b4eb9f14f7 100644 --- a/client/src/com/vaadin/client/ui/slider/SliderConnector.java +++ b/client/src/com/vaadin/client/ui/slider/SliderConnector.java @@ -21,6 +21,8 @@ import com.vaadin.client.communication.RpcProxy; import com.vaadin.client.communication.StateChangeEvent; import com.vaadin.client.ui.AbstractFieldConnector; import com.vaadin.client.ui.VSlider; +import com.vaadin.client.ui.layout.ElementResizeEvent; +import com.vaadin.client.ui.layout.ElementResizeListener; import com.vaadin.shared.ui.Connect; import com.vaadin.shared.ui.slider.SliderServerRpc; import com.vaadin.shared.ui.slider.SliderState; @@ -33,11 +35,29 @@ public class SliderConnector extends AbstractFieldConnector implements protected SliderServerRpc rpc = RpcProxy .create(SliderServerRpc.class, this); + private final ElementResizeListener resizeListener = new ElementResizeListener() { + + @Override + public void onElementResize(ElementResizeEvent e) { + getWidget().iLayout(); + } + }; + @Override public void init() { super.init(); getWidget().setConnection(getConnection()); getWidget().addValueChangeHandler(this); + + getLayoutManager().addElementResizeListener(getWidget().getElement(), + resizeListener); + } + + @Override + public void onUnregister() { + super.onUnregister(); + getLayoutManager().removeElementResizeListener( + getWidget().getElement(), resizeListener); } @Override diff --git a/uitest/src/com/vaadin/tests/components/slider/SliderResize.java b/uitest/src/com/vaadin/tests/components/slider/SliderResize.java new file mode 100644 index 0000000000..55ed56299c --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/slider/SliderResize.java @@ -0,0 +1,60 @@ +/* + * Copyright 2000-2014 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.slider; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Slider; +import com.vaadin.ui.VerticalLayout; + +public class SliderResize extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + final VerticalLayout layout = new VerticalLayout(); + layout.setSpacing(true); + layout.setWidth("500px"); + addComponent(layout); + + Slider slider = new Slider(); + slider.setId("horizontal"); + slider.setValue(100.0); + slider.setWidth("100%"); + + Button changeWidth = new Button("Set layout width to 300px", + new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + layout.setWidth("300px"); + } + }); + layout.addComponents(slider, changeWidth); + } + + @Override + protected String getTestDescription() { + return "Slider handle should be updated to correct position when the component size changes"; + } + + @Override + protected Integer getTicketNumber() { + return 12550; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/slider/SliderResizeTest.java b/uitest/src/com/vaadin/tests/components/slider/SliderResizeTest.java new file mode 100644 index 0000000000..22df3e4211 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/slider/SliderResizeTest.java @@ -0,0 +1,49 @@ +/* + * Copyright 2000-2014 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.slider; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; + +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class SliderResizeTest extends MultiBrowserTest { + + @Test + public void resizeSlider() throws IOException { + openTestURL(); + + // Verify the starting position. + assertEquals("488px", getSliderHandlePosition()); + + // Click on the button that reduces the layout width by 200px. + driver.findElement(By.className("v-button")).click(); + + // Assert that the slider handle was also moved. + assertEquals("288px", getSliderHandlePosition()); + } + + private String getSliderHandlePosition() { + WebElement handle = driver.findElement(By.className("v-slider-handle")); + return handle.getCssValue("margin-left"); + } + +} |