package com.project.website.canvas.client.shared.widgets; import java.util.Iterator; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.Widget; public class RadioButtonPanel extends Composite implements HasWidgets, HasClickHandlers { private static RadioButtonPanelUiBinder uiBinder = GWT.create(RadioButtonPanelUiBinder.class); interface RadioButtonPanelUiBinder extends UiBinder<Widget, RadioButtonPanel> { } @UiField RadioButton radioButton; @UiField FlowPanel panel; public RadioButtonPanel() { initWidget(uiBinder.createAndBindUi(this)); // Note: RadioButton doesn't fire ValueChangeEvent properly which is why the users of this control // must add handlers to our ClickHandler instead. this.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { radioButton.setValue(true); event.stopPropagation(); } }, ClickEvent.getType()); } public void setName(String name) { this.radioButton.setName(name); } public boolean getValue() { return this.radioButton.getValue(); } public void setValue(boolean value) { this.radioButton.setValue(value); } @Override public void add(Widget w) { this.panel.add(w); } @Override public void clear() { this.panel.clear(); } @Override public Iterator<Widget> iterator() { return this.panel.iterator(); } @Override public boolean remove(Widget w) { return this.panel.remove(w); } @Override public HandlerRegistration addClickHandler(ClickHandler handler) { return this.addHandler(handler, ClickEvent.getType()); } }