From: Johannes Dahlström Date: Thu, 18 Dec 2014 16:43:21 +0000 (+0200) Subject: Make disabled Grid nonfocusable and ignore events (#13334) X-Git-Tag: 7.4.0.beta2~7^2~11 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8355e9d00fd6025ce390293f9cf5fc8fdd45d0e8;p=vaadin-framework.git Make disabled Grid nonfocusable and ignore events (#13334) Change-Id: Ie017b0449c84ec1afd902503712133ab095282d8 --- diff --git a/WebContent/VAADIN/themes/base/grid/grid.scss b/WebContent/VAADIN/themes/base/grid/grid.scss index e1941826ca..310e37d0fb 100644 --- a/WebContent/VAADIN/themes/base/grid/grid.scss +++ b/WebContent/VAADIN/themes/base/grid/grid.scss @@ -198,6 +198,11 @@ $v-grid-editor-background-color: $v-grid-row-background-color !default; display: block; } + .#{$primaryStyleName}.v-disabled:focus .#{$primaryStyleName}-cell-focused:before { + // Disabled Grid should not show cell focus outline + display: none; + } + // Editor .#{$primaryStyleName}-editor { diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java index a5b90e5563..e53e79c46b 100644 --- a/client/src/com/vaadin/client/widgets/Grid.java +++ b/client/src/com/vaadin/client/widgets/Grid.java @@ -54,6 +54,7 @@ import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; +import com.google.gwt.user.client.ui.HasEnabled; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.ResizeComposite; import com.google.gwt.user.client.ui.Widget; @@ -171,7 +172,8 @@ import com.vaadin.shared.util.SharedUtil; * @author Vaadin Ltd */ public class Grid extends ResizeComposite implements - HasSelectionHandlers, SubPartAware, DeferredWorker, HasWidgets { + HasSelectionHandlers, SubPartAware, DeferredWorker, HasWidgets, + HasEnabled { /** * Enum describing different sections of Grid. @@ -2449,6 +2451,8 @@ public class Grid extends ResizeComposite implements */ private final AutoColumnWidthsRecalculator autoColumnWidthsRecalculator = new AutoColumnWidthsRecalculator(); + private boolean enabled = true; + /** * Enumeration for easy setting of selection mode. */ @@ -3456,6 +3460,19 @@ public class Grid extends ResizeComposite implements }); } + @Override + public boolean isEnabled() { + return enabled; + } + + @Override + public void setEnabled(boolean enabled) { + this.enabled = enabled; + getElement().setTabIndex(enabled ? 0 : -1); + getEscalator().setScrollLocked(Direction.VERTICAL, !enabled); + getEscalator().setScrollLocked(Direction.HORIZONTAL, !enabled); + } + @Override public void setStylePrimaryName(String style) { super.setStylePrimaryName(style); @@ -4428,6 +4445,10 @@ public class Grid extends ResizeComposite implements @Override public void onBrowserEvent(Event event) { + if (!isEnabled()) { + return; + } + EventTarget target = event.getEventTarget(); if (!Element.is(target)) { diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/DisabledGridClientTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/DisabledGridClientTest.java new file mode 100644 index 0000000000..0038d3dabe --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/DisabledGridClientTest.java @@ -0,0 +1,58 @@ +/* + * 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.grid.basicfeatures.client; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; + +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.Keys; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.testbench.elements.GridElement.GridRowElement; +import com.vaadin.tests.components.grid.basicfeatures.GridBasicFeaturesTest; + +public class DisabledGridClientTest extends GridBasicFeaturesTest { + + @Before + public void setUp() { + openTestURL(); + selectMenuPath("Component", "State", "Enabled"); + } + + @Test + public void testSelection() { + selectMenuPath("Component", "State", "Selection mode", "single"); + + GridRowElement row = getGridElement().getRow(0); + row.click(); + assertFalse("disabled row should not be selected", row.isSelected()); + + } + + @Test + public void testEditorOpening() { + selectMenuPath("Component", "Editor", "Enabled"); + + GridRowElement row = getGridElement().getRow(0); + row.click(); + assertNull("Editor should not open", getEditor()); + + new Actions(getDriver()).sendKeys(Keys.ENTER).perform(); + assertNull("Editor should not open", getEditor()); + } +} diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/DisabledGridTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/DisabledGridTest.java new file mode 100644 index 0000000000..ed1234e608 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/DisabledGridTest.java @@ -0,0 +1,58 @@ +/* + * 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.grid.basicfeatures.server; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; + +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.Keys; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.testbench.elements.GridElement.GridRowElement; +import com.vaadin.tests.components.grid.basicfeatures.GridBasicFeaturesTest; + +public class DisabledGridTest extends GridBasicFeaturesTest { + + @Before + public void setUp() { + openTestURL(); + selectMenuPath("Component", "State", "Enabled"); + } + + @Test + public void testSelection() { + selectMenuPath("Component", "State", "Selection mode", "single"); + + GridRowElement row = getGridElement().getRow(0); + row.click(); + assertFalse("disabled row should not be selected", row.isSelected()); + + } + + @Test + public void testEditorOpening() { + selectMenuPath("Component", "Editor", "Enabled"); + + GridRowElement row = getGridElement().getRow(0); + row.click(); + assertNull("Editor should not open", getEditor()); + + new Actions(getDriver()).sendKeys(Keys.ENTER).perform(); + assertNull("Editor should not open", getEditor()); + } +}