package org.ovirt.engine.ui.common.view; import java.util.HashMap; import java.util.List; import java.util.Map; import org.ovirt.engine.ui.uicommonweb.ViewFilter; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.Widget; public class ViewRadioGroup<K> extends Composite { private final List<? extends ViewFilter<K>> items; private final Map<K, RadioButton> buttons = new HashMap<>(); public ViewRadioGroup(List<? extends ViewFilter<K>> items) { this.items = items; initWidget(getRadioGroupPanel()); } private Widget getRadioGroupPanel() { FlowPanel buttonsPanel = new FlowPanel(); buttonsPanel.getElement().getStyle().setProperty("marginLeft", "auto"); //$NON-NLS-1$ //$NON-NLS-2$ buttonsPanel.getElement().getStyle().setProperty("marginRight", "auto"); //$NON-NLS-1$ //$NON-NLS-2$ for (ViewFilter<K> item : items) { RadioButton radioButton = new RadioButton("viewRadioGroup", item.toString()); //$NON-NLS-1$ radioButton.getElement().getStyle().setMarginRight(20, Unit.PX); radioButton.setText(item.getText()); buttons.put(item.getValue(), radioButton); buttonsPanel.add(radioButton); } setSelectedValue(items.get(0).getValue()); return buttonsPanel; } public void addClickHandler(ClickHandler clickHandler) { for (RadioButton button : buttons.values()) { button.addClickHandler(clickHandler); } } public RadioButton getButton(String name) { return buttons.get(name); } public K getSelectedValue() { for (Map.Entry<K, RadioButton> buttonEntry : buttons.entrySet()) { if (buttonEntry.getValue().getValue()) { return buttonEntry.getKey(); } } return null; } public void setSelectedValue(K value) { RadioButton button = buttons.get(value); if (button != null) { // Reset old selected radio if (buttons.get(getSelectedValue()) != null) { buttons.get(getSelectedValue()).setValue(false); } // Initialize new selected radio button.setValue(true); } } }