Alona Kaplan has uploaded a new change for review. Change subject: webadmin: adding ListModelRadioGroupEditor ......................................................................
webadmin: adding ListModelRadioGroupEditor An editor that displays ListModel as a gropup of radio buttons. Change-Id: I7a2754a1157b1be725871a57a4618404ad4b3223 Signed-off-by: Alona Kaplan <alkap...@redhat.com> --- A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelRadioGroup.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelRadioGroupEditor.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/RadioGroup.java 3 files changed, 250 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/28294/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelRadioGroup.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelRadioGroup.java new file mode 100644 index 0000000..5b95098 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelRadioGroup.java @@ -0,0 +1,38 @@ +package org.ovirt.engine.ui.common.widget.editor; + +import com.google.gwt.editor.client.adapters.TakesValueEditor; +import com.google.gwt.text.shared.Renderer; +import com.google.gwt.user.client.ui.HasConstrainedValue; + +/** + * List box widget that adapts to UiCommon list model items. + * + * @param <T> + * Radio box item type. + */ +public class ListModelRadioGroup<T> extends RadioGroup<T> implements EditorWidget<T, TakesValueEditor<T>>, HasConstrainedValue<T> { + + private TakesConstrainedValueEditor<T> editor; + + /** + * Creates a list box that renders its items using the specified {@link Renderer}. + * + * @param renderer + * Renderer for list box items. + */ + public ListModelRadioGroup(Renderer<T> renderer) { + super(renderer); + } + + @Override + public TakesConstrainedValueEditor<T> asEditor() { + if (editor == null) { + editor = TakesConstrainedValueEditor.of(this, this, this); + } + return editor; + } + + public RadioGroup<T> asRadioGroup() { + return this; + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelRadioGroupEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelRadioGroupEditor.java new file mode 100644 index 0000000..5942bdb --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelRadioGroupEditor.java @@ -0,0 +1,47 @@ +package org.ovirt.engine.ui.common.widget.editor; + +import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel; +import org.ovirt.engine.ui.common.widget.VisibilityRenderer; +import org.ovirt.engine.ui.common.widget.renderer.StringRenderer; + +import com.google.gwt.editor.client.IsEditor; +import com.google.gwt.text.shared.Renderer; + +/** + * Composite Editor that uses {@link ListModelRadioGroup}. + * + * @param <T> + * Radio box item type. + */ +public class ListModelRadioGroupEditor<T> extends AbstractValidatedWidgetWithLabel<T, ListModelRadioGroup<T>> + implements IsEditor<WidgetWithLabelEditor<T, ListModelRadioGroupEditor<T>>> { + + private final WidgetWithLabelEditor<T, ListModelRadioGroupEditor<T>> editor; + + public ListModelRadioGroupEditor() { + this(new StringRenderer<T>()); + } + + public ListModelRadioGroupEditor(VisibilityRenderer visibilityRenderer) { + this(new StringRenderer<T>(), visibilityRenderer); + } + + public ListModelRadioGroupEditor(Renderer<T> renderer, VisibilityRenderer visibilityRenderer) { + super(new ListModelRadioGroup<T>(renderer), visibilityRenderer); + this.editor = WidgetWithLabelEditor.of(getContentWidget().asEditor(), this); + } + + public ListModelRadioGroupEditor(Renderer<T> renderer) { + this(renderer, new VisibilityRenderer.SimpleVisibilityRenderer()); + } + + public RadioGroup<T> asRadioGroup() { + return getContentWidget().asRadioGroup(); + } + + @Override + public WidgetWithLabelEditor<T, ListModelRadioGroupEditor<T>> asEditor() { + return editor; + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/RadioGroup.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/RadioGroup.java new file mode 100644 index 0000000..30fe05d --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/RadioGroup.java @@ -0,0 +1,165 @@ +package org.ovirt.engine.ui.common.widget.editor; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.KeyDownHandler; +import com.google.gwt.event.dom.client.KeyPressHandler; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.text.shared.Renderer; +import com.google.gwt.user.client.TakesValue; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HasConstrainedValue; +import com.google.gwt.user.client.ui.RadioButton; + +public class RadioGroup<K> extends Composite implements TakesValue<K>, HasConstrainedValue<K> { + + private final Map<K, RadioButton> buttons = new HashMap<K, RadioButton>(); + FlowPanel buttonsPanel = new FlowPanel(); + Renderer<K> renderer; + boolean enabled; + K selectedValue; + String groupString; + + public RadioGroup(Renderer<K> renderer) { + this.renderer = renderer; + buttonsPanel.getElement().getStyle().setProperty("marginLeft", "auto"); //$NON-NLS-1$ //$NON-NLS-2$ + buttonsPanel.getElement().getStyle().setProperty("marginRight", "auto"); //$NON-NLS-1$ //$NON-NLS-2$ + initWidget(buttonsPanel); + groupString = getElement().getString(); + } + + public RadioButton getButton(String name) { + return buttons.get(name); + } + + @Override + public K getValue() { + return selectedValue; + } + + @Override + public void setValue(K value) { + setValue(value, false); + } + + @Override + public void setValue(K value, boolean fireEvents) { + if (value == null) { + throw new IllegalArgumentException(); + } + + if (!buttons.containsKey(value)) { + addValue(value); + } + + if (value == selectedValue + || (selectedValue != null && selectedValue.equals(value))) { + return; + } + + selectedValue = value; + + RadioButton button = buttons.get(value); + + // Reset old selected radio + if (buttons.get(selectedValue) != null) { + buttons.get(selectedValue).setValue(false); + } + + // Initialize new selected radio + button.setValue(true); + + if (fireEvents) { + ValueChangeEvent.fireIfNotEqual(this, selectedValue, value); + } + } + + public int getTabIndex() { + return getFirstRadioButton().getTabIndex(); + } + + public void setAccessKey(char key) { + getFirstRadioButton().setAccessKey(key); + } + + public void setFocus(boolean focused) { + getFirstRadioButton().setFocus(focused); + } + + private RadioButton getFirstRadioButton() { + // Assuming there is at list one radio button, a group with no buttons is useless + return buttons.get(0); + } + + public void setTabIndex(int index) { + for (RadioButton radioButton : buttons.values()) { + radioButton.setTabIndex(index++); + } + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + for (RadioButton radioButton : buttons.values()) { + radioButton.setEnabled(enabled); + } + } + + public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) { + return null; + } + + public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) { + return null; + } + + public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) { + return null; + } + + @Override + public HandlerRegistration addValueChangeHandler(ValueChangeHandler<K> handler) { + return addHandler(handler, ValueChangeEvent.getType()); + } + + @Override + public void setAcceptableValues(Collection<K> values) { + buttons.clear(); + buttonsPanel.clear(); + + for (final K value : values) { + addValue(value); + } + + setValue(values.iterator().next()); + } + + private void addValue(final K value) { + if (buttons.containsKey(value)) { + return; + } + + RadioButton radioButton = new RadioButton(groupString, renderer.render(value)); + radioButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() { + @Override + public void onValueChange(ValueChangeEvent<Boolean> event) { + if (event.getValue()) { + setValue(value); + } + } + }); + radioButton.getElement().getStyle().setMarginRight(20, Unit.PX); + buttons.put(value, radioButton); + buttonsPanel.add(radioButton); + } +} -- To view, visit http://gerrit.ovirt.org/28294 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7a2754a1157b1be725871a57a4618404ad4b3223 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alona Kaplan <alkap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches