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

Reply via email to