From 31f05d0001b6911fcac93bf09b0301dbf1385fa4 Mon Sep 17 00:00:00 2001 From: Teemu Pòˆntelin Date: Sat, 5 Apr 2014 15:11:26 +0300 Subject: 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 --- client/src/com/vaadin/client/ui/VSlider.java | 4 +- .../vaadin/client/ui/slider/SliderConnector.java | 20 ++++++++ .../tests/components/slider/SliderResize.java | 60 ++++++++++++++++++++++ .../tests/components/slider/SliderResizeTest.java | 49 ++++++++++++++++++ 4 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/slider/SliderResize.java create mode 100644 uitest/src/com/vaadin/tests/components/slider/SliderResizeTest.java 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 { + HasValue { 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"); + } + +} -- cgit v1.2.3