Browse Source

Keep all checkbox related data in Map don't address it via the index #11772

Change-Id: I2c9c68134d9fe958e2881975d1d845dea819a761
tags/7.4.0.alpha2
Denis Anisimov 10 years ago
parent
commit
b0e35fc1dd

+ 17
- 10
client/src/com/vaadin/client/ui/VOptionGroup.java View File

@@ -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++;
}
}


+ 64
- 0
uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroup.java View File

@@ -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;
}

}

+ 50
- 0
uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroupTest.java View File

@@ -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")));
}

}

Loading…
Cancel
Save