diff options
3 files changed, 158 insertions, 14 deletions
diff --git a/client/src/com/vaadin/client/ui/table/TableConnector.java b/client/src/com/vaadin/client/ui/table/TableConnector.java index a554b9335c..cfe93b6641 100644 --- a/client/src/com/vaadin/client/ui/table/TableConnector.java +++ b/client/src/com/vaadin/client/ui/table/TableConnector.java @@ -180,20 +180,6 @@ public class TableConnector extends AbstractFieldConnector implements return; } - getWidget().enabled = isEnabled(); - - if (BrowserInfo.get().isIE8() && !getWidget().enabled) { - /* - * The disabled shim will not cover the table body if it is relative - * in IE8. See #7324 - */ - getWidget().scrollBodyPanel.getElement().getStyle() - .setPosition(Position.STATIC); - } else if (BrowserInfo.get().isIE8()) { - getWidget().scrollBodyPanel.getElement().getStyle() - .setPosition(Position.RELATIVE); - } - getWidget().paintableId = uidl.getStringAttribute("id"); getWidget().immediate = getState().immediate; @@ -399,6 +385,25 @@ public class TableConnector extends AbstractFieldConnector implements } @Override + public void updateEnabledState(boolean enabledState) { + super.updateEnabledState(enabledState); + getWidget().enabled = isEnabled(); + + if (BrowserInfo.get().isIE8() && !getWidget().enabled) { + /* + * The disabled shim will not cover the table body if it is relative + * in IE8. See #7324 + */ + getWidget().scrollBodyPanel.getElement().getStyle() + .setPosition(Position.STATIC); + } else if (BrowserInfo.get().isIE8()) { + getWidget().scrollBodyPanel.getElement().getStyle() + .setPosition(Position.RELATIVE); + } + + } + + @Override public VScrollTable getWidget() { return (VScrollTable) super.getWidget(); } diff --git a/uitest/src/com/vaadin/tests/components/table/TableParentEnabledStateChange.java b/uitest/src/com/vaadin/tests/components/table/TableParentEnabledStateChange.java new file mode 100644 index 0000000000..9aeb25002d --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableParentEnabledStateChange.java @@ -0,0 +1,84 @@ +/* + * 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.table; + +import com.vaadin.data.util.IndexedContainer; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.FormLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; + +public class TableParentEnabledStateChange extends AbstractTestUIWithLog { + + private Button toggle; + + @Override + protected void setup(VaadinRequest request) { + + addComponent(new Label( + "Toggling the enabled state of the custom component will break the selectability of the row in the table. ")); + + final MyCustomComponent customComponent = new MyCustomComponent(); + + toggle = new Button("Toggle enabled state ; " + + customComponent.isEnabled()); + toggle.addClickListener(new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + customComponent.setEnabled(!customComponent.isEnabled()); + toggle.setCaption("Toggle enabled state ; " + + customComponent.isEnabled()); + } + }); + addComponent(toggle); + addComponent(customComponent); + + } + + class MyCustomComponent extends CustomComponent { + + private static final long serialVersionUID = 1L; + private FormLayout root; + private Table table; + private Button toggle; + + public MyCustomComponent() { + root = new FormLayout(); + setCompositionRoot(root); + setWidth("300px"); + setHeight("300px"); + + table = new Table(); + table.setWidth("200px"); + table.setHeight("150px"); + table.setSelectable(true); + + IndexedContainer container = new IndexedContainer(); + container.addContainerProperty("name", String.class, + "Select this item"); + container.addItem(1); + table.setContainerDataSource(container); + + root.addComponent(table); + } + } + +} diff --git a/uitest/src/com/vaadin/tests/components/table/TableParentEnabledStateChangeTest.java b/uitest/src/com/vaadin/tests/components/table/TableParentEnabledStateChangeTest.java new file mode 100644 index 0000000000..5fde9c385e --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableParentEnabledStateChangeTest.java @@ -0,0 +1,55 @@ +/* + * 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.table; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.TableElement; +import com.vaadin.testbench.elements.TableRowElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class TableParentEnabledStateChangeTest extends SingleBrowserTest { + + @Test + public void tableEnabledShouldFollowParent() { + openTestURL(); + TableElement table = $(TableElement.class).first(); + TableRowElement row = table.getRow(0); + + ButtonElement button = $(ButtonElement.class).first(); + + row.click(); + Assert.assertTrue(isSelected(row)); + + // Disable + button.click(); + Assert.assertTrue(isSelected(row)); + row.click(); // Should have no effect + Assert.assertTrue(isSelected(row)); + + // Enable + button.click(); + Assert.assertTrue(isSelected(row)); + row.click(); // Should deselect + Assert.assertFalse(isSelected(row)); + } + + private boolean isSelected(TableRowElement row) { + return hasCssClass(row, "v-selected"); + } +} |