]> source.dussan.org Git - vaadin-framework.git/commitdiff
Slider handle is now correctly updated on resize (#12550)
authorTeemu Pòˆntelin <teemu@vaadin.com>
Sat, 5 Apr 2014 12:11:26 +0000 (15:11 +0300)
committerVaadin Code Review <review@vaadin.com>
Tue, 8 Apr 2014 08:57:45 +0000 (08:57 +0000)
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
client/src/com/vaadin/client/ui/slider/SliderConnector.java
uitest/src/com/vaadin/tests/components/slider/SliderResize.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/slider/SliderResizeTest.java [new file with mode: 0644]

index 44c2f2ddc8d1ae9a81bbb059741afbcc757942ef..7ac31fd85a2f7dc9a67bae7f8b24544b4da9efee 100644 (file)
@@ -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();
index 71462d69f0c2f8141b93b2e2392bca9381d2aa27..b4eb9f14f7f4c88bbe463f7fbdeac515de226550 100644 (file)
@@ -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 (file)
index 0000000..55ed562
--- /dev/null
@@ -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 (file)
index 0000000..22df3e4
--- /dev/null
@@ -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");
+    }
+
+}