diff options
author | Sauli Tähkäpää <sauli@vaadin.com> | 2014-06-26 09:35:05 +0300 |
---|---|---|
committer | Sauli Tähkäpää <sauli@vaadin.com> | 2014-06-26 10:11:23 +0000 |
commit | 949fb45841374204307b50f48d0d2d9ab921deb6 (patch) | |
tree | 5b67758f7e0a9983ca88979576971edaf180b58c | |
parent | 9a84fb14f2b7fc3c405f1446a007d5b9cd796c97 (diff) | |
download | vaadin-framework-949fb45841374204307b50f48d0d2d9ab921deb6.tar.gz vaadin-framework-949fb45841374204307b50f48d0d2d9ab921deb6.zip |
Revert "Add scrollbars to ComboBox suggestion popup if low on screen estate (#11929)"
This reverts commit ede8fbaad050c98682df9da935caf59a3a3787c6.
Change-Id: I6d2b6ad3901ac50782a9c8af6847c0b917d6027d
3 files changed, 15 insertions, 202 deletions
diff --git a/client/src/com/vaadin/client/ui/VFilterSelect.java b/client/src/com/vaadin/client/ui/VFilterSelect.java index 7157ef99b3..004072d04a 100644 --- a/client/src/com/vaadin/client/ui/VFilterSelect.java +++ b/client/src/com/vaadin/client/ui/VFilterSelect.java @@ -30,7 +30,6 @@ import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style; import com.google.gwt.dom.client.Style.Display; -import com.google.gwt.dom.client.Style.Overflow; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.BlurHandler; @@ -213,8 +212,6 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, private final Element down = DOM.createDiv(); private final Element status = DOM.createDiv(); - private int desiredHeight = -1; - private boolean isPagingEnabled = true; private long lastAutoClosed; @@ -231,7 +228,6 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, debug("VFS.SP: constructor()"); setOwner(VFilterSelect.this); menu = new SuggestionMenu(); - menu.getElement().getStyle().setOverflowY(Overflow.AUTO); setWidget(menu); getElement().getStyle().setZIndex(Z_INDEX); @@ -554,12 +550,16 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, public void setPosition(int offsetWidth, int offsetHeight) { debug("VFS.SP: setPosition()"); - int top = getPopupTop(); - int left = getPopupLeft(); + int top = -1; + int left = -1; - if (desiredHeight < 0) { - desiredHeight = offsetHeight; + // reset menu size and retrieve its "natural" size + menu.setHeight(""); + if (currentPage > 0) { + // fix height to avoid height change when getting to last page + menu.fixHeightTo(pageLength); } + offsetHeight = getOffsetHeight(); final int desiredWidth = getMainWidth(); Element menuFirstChild = menu.getElement().getFirstChildElement(); @@ -585,20 +585,16 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, getContainerElement().getStyle().setWidth(rootWidth, Unit.PX); } - final int spaceAvailableBelow = Window.getClientHeight() - - (top - Window.getScrollTop()); - final int spaceAvailableAbove = top - Window.getScrollTop() - - VFilterSelect.this.getOffsetHeight(); - if (spaceAvailableBelow < desiredHeight - && spaceAvailableBelow < spaceAvailableAbove) { + if (offsetHeight + getPopupTop() > Window.getClientHeight() + + Window.getScrollTop()) { // popup on top of input instead - top -= desiredHeight + VFilterSelect.this.getOffsetHeight(); - offsetHeight = desiredHeight; + top = getPopupTop() - offsetHeight + - VFilterSelect.this.getOffsetHeight(); if (top < 0) { - offsetHeight += top; top = 0; } } else { + top = getPopupTop(); /* * Take popup top margin into account. getPopupTop() returns the * top value including the margin but the value we give must not @@ -606,19 +602,6 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, */ int topMargin = (top - topPosition); top -= topMargin; - offsetHeight = Math.min(desiredHeight, spaceAvailableBelow); - } - - /* - * Resize popup and menu if calculated height doesn't match the - * actual height - */ - if (getOffsetHeight() != offsetHeight) { - int menuHeight = offsetHeight - up.getOffsetHeight() - - down.getOffsetHeight() - status.getOffsetHeight(); - menu.setHeight(menuHeight + "px"); - getContainerElement().getStyle().setHeight(offsetHeight, - Unit.PX); } // fetch real width (mac FF bugs here due GWT popups overflow:auto ) @@ -631,6 +614,8 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, if (left < 0) { left = 0; } + } else { + left = getPopupLeft(); } setPopupPosition(left, top); } diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxOnSmallScreen.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxOnSmallScreen.java deleted file mode 100644 index c50e483c44..0000000000 --- a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxOnSmallScreen.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.combobox; - -import com.vaadin.server.VaadinRequest; -import com.vaadin.tests.components.AbstractTestUI; -import com.vaadin.ui.Alignment; -import com.vaadin.ui.ComboBox; -import com.vaadin.ui.VerticalLayout; - -/** - * Test UI for issue #11929 where ComboBox suggestion popup hides the ComboBox - * itself obscuring the text input field. - * - * @author Vaadin Ltd - */ -public class ComboBoxOnSmallScreen extends AbstractTestUI { - - private static final String PID = "captionPID"; - - @Override - protected void setup(VaadinRequest request) { - addComponents(createComboBox(), createComboBox()); - VerticalLayout vl = getLayout(); - vl.setHeight(300, Unit.PIXELS); - vl.setComponentAlignment(vl.getComponent(1), Alignment.BOTTOM_LEFT); - } - - @Override - protected String getTestDescription() { - return "Combobox hides what you are typing on small screen"; - } - - @Override - protected Integer getTicketNumber() { - return 11929; - } - - private ComboBox createComboBox() { - ComboBox cb = new ComboBox(); - cb.addContainerProperty(PID, String.class, ""); - cb.setItemCaptionPropertyId(PID); - - for (int i = 1; i < 21; ++i) { - final String v = "Item #" + i; - cb.getItem(cb.addItem()).getItemProperty(PID).setValue(v); - } - - return cb; - } -} diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxOnSmallScreenTest.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxOnSmallScreenTest.java deleted file mode 100644 index c45168aa6d..0000000000 --- a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxOnSmallScreenTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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.combobox; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; - -import org.junit.Test; -import org.openqa.selenium.By; -import org.openqa.selenium.Dimension; -import org.openqa.selenium.WebDriver.Window; -import org.openqa.selenium.WebElement; - -import com.vaadin.client.ui.VFilterSelect; -import com.vaadin.testbench.elements.ComboBoxElement; -import com.vaadin.tests.tb3.MultiBrowserTest; - -/** - * ComboBox suggestion popup should not obscure the text input box. - * - * @author Vaadin Ltd - */ -public class ComboBoxOnSmallScreenTest extends MultiBrowserTest { - - private static final Dimension TARGETSIZE = new Dimension(600, 300); - private static final String POPUPCLASSNAME = VFilterSelect.CLASSNAME - + "-suggestpopup"; - - @Override - public void setup() throws Exception { - super.setup(); - - openTestURL(); - - getWindow().setSize(TARGETSIZE); - } - - @Test - public void testUpperSuggestionPopupOverlayPosition() { - ComboBoxElement cb = getComboBoxAndOpenPopup(0); - assertOverlayPosition(cb, getPopup()); - } - - @Test - public void testUpperSuggestionPopupOverlaySize() { - ComboBoxElement cb = getComboBoxAndOpenPopup(0); - assertOverlaySize(cb, getPopup()); - } - - @Test - public void testLowerSuggestionPopupOverlayPosition() { - ComboBoxElement cb = getComboBoxAndOpenPopup(1); - assertOverlayPosition(cb, getPopup()); - } - - @Test - public void testLowerSuggestionPopupOverlaySize() { - ComboBoxElement cb = getComboBoxAndOpenPopup(1); - assertOverlaySize(cb, getPopup()); - } - - private void assertOverlayPosition(WebElement combobox, WebElement popup) { - final int popupTop = popup.getLocation().y; - final int popupBottom = popupTop + popup.getSize().getHeight(); - final int cbTop = combobox.getLocation().y; - final int cbBottom = cbTop + combobox.getSize().getHeight(); - - assertThat("Popup overlay does not overlap with the textbox", - popupTop >= cbBottom || popupBottom <= cbTop, is(true)); - } - - private void assertOverlaySize(WebElement combobox, WebElement popup) { - final int popupTop = popup.getLocation().y; - final int popupBottom = popupTop + popup.getSize().getHeight(); - final int rootHeight = findElement(By.tagName("body")).getSize().height; - - assertThat("Popup overlay inside the viewport", popupTop < 0 - || popupBottom > rootHeight, is(false)); - } - - private ComboBoxElement getComboBoxAndOpenPopup(int comboboxIndex) { - ComboBoxElement cb = $(ComboBoxElement.class).get(comboboxIndex); - cb.openPopup(); - return cb; - } - - private WebElement getPopup() { - return findElement(By.className(POPUPCLASSNAME)); - } - - private Window getWindow() { - return getDriver().manage().window(); - } - -} |