summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeemu Pòˆntelin <teemu@vaadin.com>2014-04-05 15:11:26 +0300
committerVaadin Code Review <review@vaadin.com>2014-04-08 08:57:45 +0000
commit31f05d0001b6911fcac93bf09b0301dbf1385fa4 (patch)
treed4083f547f4989e200047d19563643a89fc8828b
parent49771e5a68316ff6cff1db57c328332988f24fb7 (diff)
downloadvaadin-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
-rw-r--r--client/src/com/vaadin/client/ui/VSlider.java4
-rw-r--r--client/src/com/vaadin/client/ui/slider/SliderConnector.java20
-rw-r--r--uitest/src/com/vaadin/tests/components/slider/SliderResize.java60
-rw-r--r--uitest/src/com/vaadin/tests/components/slider/SliderResizeTest.java49
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");
+ }
+
+}