]> source.dussan.org Git - vaadin-framework.git/commitdiff
Make disabled Grid nonfocusable and ignore events (#13334)
authorJohannes Dahlström <johannesd@vaadin.com>
Thu, 18 Dec 2014 16:43:21 +0000 (18:43 +0200)
committerTeemu Suo-Anttila <teemusa@vaadin.com>
Tue, 30 Dec 2014 08:09:50 +0000 (08:09 +0000)
Change-Id: Ie017b0449c84ec1afd902503712133ab095282d8

WebContent/VAADIN/themes/base/grid/grid.scss
client/src/com/vaadin/client/widgets/Grid.java
uitest/src/com/vaadin/tests/components/grid/basicfeatures/client/DisabledGridClientTest.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/DisabledGridTest.java [new file with mode: 0644]

index e1941826cadab73d02809c32aca3ae6ab2ef3198..310e37d0fb6707ab460249922f35027c669213d2 100644 (file)
@@ -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 {
index a5b90e55636afc4f5e3d57b03b1eb9e7a29e2705..e53e79c46b5d5f998b92352d7666422cc9fa60a5 100644 (file)
@@ -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<T> extends ResizeComposite implements
-        HasSelectionHandlers<T>, SubPartAware, DeferredWorker, HasWidgets {
+        HasSelectionHandlers<T>, SubPartAware, DeferredWorker, HasWidgets,
+        HasEnabled {
 
     /**
      * Enum describing different sections of Grid.
@@ -2449,6 +2451,8 @@ public class Grid<T> 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<T> 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<T> 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 (file)
index 0000000..0038d3d
--- /dev/null
@@ -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 (file)
index 0000000..ed1234e
--- /dev/null
@@ -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());
+    }
+}