package org.aplikator.client.local.widgets; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.aplikator.client.shared.data.ListItem; import org.aplikator.client.shared.descriptor.PropertyDTO; import org.gwtbootstrap3.client.ui.ButtonGroup; import org.gwtbootstrap3.client.ui.RadioButton; import org.gwtbootstrap3.client.ui.constants.Toggle; import com.google.gwt.dom.client.Style; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; public class RadioButtonWidget<T extends Serializable> extends DataFieldBase implements DataField<T> { private List<RadioButton> buttons; public RadioButtonWidget(String caption, PropertyDTO property, int size) { super(caption, property); buttons = new ArrayList<RadioButton>(property.getListValues().size()); ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.getElement().getStyle().setDisplay(Style.Display.BLOCK); buttonGroup.setDataToggle(Toggle.BUTTONS); controlHolder.add(buttonGroup); for (Object obj : property.getListValues()) { ListItem item = (ListItem) obj; RadioButton button = new RadioButton(property.getId(), item.getName()); button.addValueChangeHandler(new ValueChangeHandler<Boolean>() { public void onValueChange(ValueChangeEvent<Boolean> event) { setDirty(true); } }); //button.addStyleName(PaneWidgetResources.INSTANCE.css().formData()); buttons.add(button); buttonGroup.add(button); } this.setGridSize(size); } public void setValue(T value) { for (int i = 0; i < getProperty().getListValues().size(); i++) { if (((ListItem) getProperty().getListValues().get(i)).getValue().equals(value)) { buttons.get(i).setActive(true); } else { buttons.get(i).setActive(false); } } } @SuppressWarnings("unchecked") public T getValue() { int index = -1; for (int i = 0; i < buttons.size(); i++) { if (buttons.get(i).getValue()) { index = i; break; } } if (index == -1) { return null; } return (T) ((ListItem) getProperty().getListValues().get(index)).getValue(); } public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) { for (RadioButton button : buttons) { button.addHandler(handler, ValueChangeEvent.getType()); } return null; } public void setEnabled(boolean enabled) { if (property.getRefferedThrough() != null) { enabled = false; } for (RadioButton button : buttons) { button.setEnabled(enabled); } } }