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