Change-Id: I2c9c68134d9fe958e2881975d1d845dea819a761tags/7.4.0.alpha2
@@ -57,7 +57,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler, | |||
private final Map<CheckBox, String> optionsToKeys; | |||
private final List<Boolean> optionsEnabled; | |||
private final Map<CheckBox, Boolean> optionsEnabled; | |||
/** For internal use only. May be removed or replaced in the future. */ | |||
public boolean sendFocusEvents = false; | |||
@@ -94,7 +94,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler, | |||
super(CLASSNAME); | |||
panel = (Panel) optionsContainer; | |||
optionsToKeys = new HashMap<CheckBox, String>(); | |||
optionsEnabled = new ArrayList<Boolean>(); | |||
optionsEnabled = new HashMap<CheckBox, Boolean>(); | |||
wasMultiselect = isMultiselect(); | |||
} | |||
@@ -176,7 +176,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler, | |||
.getBooleanAttribute(OptionGroupConstants.ATTRIBUTE_OPTION_DISABLED); | |||
boolean enabled = optionEnabled && !isReadonly() && isEnabled(); | |||
op.setEnabled(enabled); | |||
optionsEnabled.add(optionEnabled); | |||
optionsEnabled.put(op, optionEnabled); | |||
setStyleName(op.getElement(), | |||
ApplicationConnection.DISABLED_CLASSNAME, | |||
@@ -239,19 +239,26 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler, | |||
@Override | |||
protected void updateEnabledState() { | |||
int i = 0; | |||
boolean optionGroupEnabled = isEnabled() && !isReadonly(); | |||
// sets options enabled according to the widget's enabled, | |||
// readonly and each options own enabled | |||
for (Widget w : panel) { | |||
if (w instanceof HasEnabled) { | |||
((HasEnabled) w).setEnabled(optionsEnabled.get(i) | |||
&& optionGroupEnabled); | |||
setStyleName(w.getElement(), | |||
ApplicationConnection.DISABLED_CLASSNAME, | |||
!(optionsEnabled.get(i) && isEnabled())); | |||
HasEnabled hasEnabled = (HasEnabled) w; | |||
Boolean isOptionEnabled = optionsEnabled.get(w); | |||
if (isOptionEnabled == null) { | |||
hasEnabled.setEnabled(optionGroupEnabled); | |||
setStyleName(w.getElement(), | |||
ApplicationConnection.DISABLED_CLASSNAME, | |||
!isEnabled()); | |||
} else { | |||
hasEnabled | |||
.setEnabled(isOptionEnabled && optionGroupEnabled); | |||
setStyleName(w.getElement(), | |||
ApplicationConnection.DISABLED_CLASSNAME, | |||
!(isOptionEnabled && isEnabled())); | |||
} | |||
} | |||
i++; | |||
} | |||
} | |||
@@ -0,0 +1,64 @@ | |||
/* | |||
* 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.optiongroup; | |||
import java.util.Collections; | |||
import com.vaadin.data.Property; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.CheckBox; | |||
import com.vaadin.ui.OptionGroup; | |||
/** | |||
* Test UI for unset read-only flag of Option group with new items allowed. | |||
* | |||
* @author Vaadin Ltd | |||
*/ | |||
public class ReadOnlyOptionGroup extends AbstractTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
final OptionGroup optionGroup = new OptionGroup("test field", | |||
Collections.singletonList("Option")); | |||
optionGroup.setNewItemsAllowed(true); | |||
final CheckBox readOnlyCheckbox = new CheckBox("read-only"); | |||
readOnlyCheckbox.setImmediate(true); | |||
readOnlyCheckbox | |||
.addValueChangeListener(new Property.ValueChangeListener() { | |||
@Override | |||
public void valueChange(Property.ValueChangeEvent event) { | |||
optionGroup.setReadOnly(readOnlyCheckbox.getValue()); | |||
} | |||
}); | |||
readOnlyCheckbox.setValue(Boolean.TRUE); | |||
addComponent(optionGroup); | |||
addComponent(readOnlyCheckbox); | |||
} | |||
@Override | |||
protected String getTestDescription() { | |||
return "Unset read-only state for Option group should not throw an exception"; | |||
} | |||
@Override | |||
protected Integer getTicketNumber() { | |||
return 11772; | |||
} | |||
} |
@@ -0,0 +1,50 @@ | |||
/* | |||
* 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.optiongroup; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import org.openqa.selenium.By; | |||
import org.openqa.selenium.WebElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
/** | |||
* Test for Option group (with new items allowed): unset read only state. | |||
* | |||
* @author Vaadin Ltd | |||
*/ | |||
public class ReadOnlyOptionGroupTest extends MultiBrowserTest { | |||
@Test | |||
public void testOptionGroup() { | |||
setDebug(true); | |||
openTestURL(); | |||
WebElement checkbox = driver.findElement(By.className("v-checkbox")); | |||
WebElement checkboxInput = checkbox.findElement(By.tagName("input")); | |||
checkboxInput.click(); | |||
Assert.assertFalse("There is a client side exception after unset " | |||
+ "readonly mode for option group", | |||
isElementPresent(By.className("v-Notification-error"))); | |||
Assert.assertFalse("Radio button in option group is still disabled " | |||
+ "after unset reaonly", | |||
isElementPresent(By.className("v-radiobutton-disabled"))); | |||
} | |||
} |