* Allow to disable user selection in the grid model. Fixes vaadin/framework8-issues#546tags/8.0.0.beta2
@@ -99,4 +99,14 @@ public abstract class AbstractSelectionModel<T> extends AbstractGridExtension<T> | |||
super.remove(); | |||
} | |||
@Override | |||
public boolean isUserSelectionAllowed() { | |||
return getState(false).selectionAllowed; | |||
} | |||
@Override | |||
public void setUserSelectionAllowed(boolean allowed) { | |||
getState().selectionAllowed = allowed; | |||
} | |||
} |
@@ -43,4 +43,27 @@ public interface GridSelectionModel<T> extends SelectionModel<T>, Extension { | |||
*/ | |||
@Override | |||
public void remove(); | |||
/** | |||
* Sets whether the user is allowed to change the selection. | |||
* <p> | |||
* The check is done only for the client side actions. It doesn't affect | |||
* selection requests sent from the server side. | |||
* | |||
* @param allowed | |||
* <code>true</code> if the user is allowed to change the | |||
* selection, <code>false</code> otherwise | |||
*/ | |||
public void setUserSelectionAllowed(boolean allowed); | |||
/** | |||
* Checks if the user is allowed to change the selection. | |||
* <p> | |||
* The check is done only for the client side actions. It doesn't affect | |||
* selection requests sent from the server side. | |||
* | |||
* @return <code>true</code> if the user is allowed to change the selection, | |||
* <code>false</code> otherwise | |||
*/ | |||
public boolean isUserSelectionAllowed(); | |||
} |
@@ -324,7 +324,7 @@ public class MultiSelectionModelImpl<T> extends AbstractSelectionModel<T> | |||
@Override | |||
public void setReadOnly(boolean readOnly) { | |||
getState().selectionAllowed = !readOnly; | |||
setUserSelectionAllowed(!readOnly); | |||
} | |||
@Override | |||
@@ -458,10 +458,6 @@ public class MultiSelectionModelImpl<T> extends AbstractSelectionModel<T> | |||
}, userOriginated); | |||
} | |||
private boolean isUserSelectionAllowed() { | |||
return getState(false).selectionAllowed; | |||
} | |||
private void doUpdateSelection(Consumer<Collection<T>> handler, | |||
boolean userOriginated) { | |||
if (getParent() == null) { |
@@ -64,4 +64,13 @@ public class NoSelectionModel<T> extends AbstractExtension | |||
"This selection model doesn't allow selection, cannot add selection listeners to it"); | |||
} | |||
@Override | |||
public void setUserSelectionAllowed(boolean allowed) { | |||
} | |||
@Override | |||
public boolean isUserSelectionAllowed() { | |||
return false; | |||
} | |||
} |
@@ -27,7 +27,6 @@ import com.vaadin.event.selection.SingleSelectionListener; | |||
import com.vaadin.shared.Registration; | |||
import com.vaadin.shared.data.selection.SelectionServerRpc; | |||
import com.vaadin.shared.ui.grid.SingleSelectionModelState; | |||
import com.vaadin.ui.Component; | |||
import com.vaadin.ui.SingleSelect; | |||
/** | |||
@@ -227,10 +226,6 @@ public class SingleSelectionModelImpl<T> extends AbstractSelectionModel<T> | |||
return getState().deselectAllowed; | |||
} | |||
private boolean isUserSelectionAllowed() { | |||
return getState(false).selectionAllowed; | |||
} | |||
/** | |||
* Gets a wrapper for using this grid as a single select in a binder. | |||
* | |||
@@ -275,7 +270,7 @@ public class SingleSelectionModelImpl<T> extends AbstractSelectionModel<T> | |||
@Override | |||
public void setReadOnly(boolean readOnly) { | |||
getState().selectionAllowed = !readOnly; | |||
setUserSelectionAllowed(!readOnly); | |||
} | |||
@Override |
@@ -0,0 +1,50 @@ | |||
/* | |||
* Copyright 2000-2016 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; | |||
import com.vaadin.data.ValueProvider; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.Button; | |||
import com.vaadin.ui.Grid; | |||
import com.vaadin.ui.Grid.SelectionMode; | |||
import com.vaadin.ui.components.grid.GridSelectionModel; | |||
/** | |||
* @author Vaadin Ltd | |||
* | |||
*/ | |||
public class GridDisallowUserSelection extends AbstractTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
Grid<String> grid = new Grid<>(); | |||
grid.addColumn(ValueProvider.identity()); | |||
grid.setItems("a", "b"); | |||
GridSelectionModel<String> model = grid | |||
.setSelectionMode(SelectionMode.SINGLE); | |||
model.setUserSelectionAllowed(false); | |||
addComponent(grid); | |||
Button button = new Button("Multi select", event -> { | |||
GridSelectionModel<String> multi = grid | |||
.setSelectionMode(SelectionMode.MULTI); | |||
multi.setUserSelectionAllowed(false); | |||
}); | |||
addComponent(button); | |||
} | |||
} |
@@ -0,0 +1,51 @@ | |||
/* | |||
* Copyright 2000-2016 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; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import com.vaadin.testbench.elements.ButtonElement; | |||
import com.vaadin.testbench.elements.GridElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
/** | |||
* @author Vaadin Ltd | |||
* | |||
*/ | |||
public class GridDisallowUserSelectionTest extends MultiBrowserTest { | |||
@Test | |||
public void checkSelection() { | |||
openTestURL(); | |||
assertNoSelection(0); | |||
assertNoSelection(1); | |||
// change model from single select to mutli | |||
$(ButtonElement.class).first().click(); | |||
assertNoSelection(0); | |||
assertNoSelection(1); | |||
} | |||
private void assertNoSelection(int index) { | |||
GridElement grid = $(GridElement.class).first(); | |||
grid.getCell(index, 0).click(); | |||
Assert.assertFalse(grid.getRow(0).isSelected()); | |||
} | |||
} |