anmolbabu has uploaded a new change for review. Change subject: webadmin : CheckBoxGroup Widget and TimeBox Widget ......................................................................
webadmin : CheckBoxGroup Widget and TimeBox Widget CheckBoxGroup Widget and TimeBox Widget Change-Id: I38daa0d2c151eb0e34603488496a8a1ea4719c87 Signed-off-by: Anmol Babu <[email protected]> --- A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/CheckBoxGroup.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroup.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroupEditor.java 3 files changed, 275 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/02/37302/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/CheckBoxGroup.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/CheckBoxGroup.java new file mode 100644 index 0000000..361932f --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/CheckBoxGroup.java @@ -0,0 +1,200 @@ +package org.ovirt.engine.ui.common.widget.editor; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.event.dom.client.KeyDownHandler; +import com.google.gwt.event.dom.client.KeyPressEvent; +import com.google.gwt.event.dom.client.KeyPressHandler; +import com.google.gwt.event.dom.client.KeyUpEvent; +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.safehtml.shared.SafeHtmlUtils; +import com.google.gwt.text.shared.Parser; +import com.google.gwt.text.shared.Renderer; +import com.google.gwt.user.client.TakesValue; +import com.google.gwt.user.client.ui.CheckBox; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HasConstrainedValue; + +public class CheckBoxGroup<T> extends Composite implements TakesValue<T>, HasConstrainedValue<T> { + private final Map<T, CheckBox> checkBoxes = new HashMap<>(); + + private final Renderer<T> renderer; + + private final Map<T, FlowPanel> panels = new HashMap<T, FlowPanel>(); + private final FlowPanel wrapperPanel = new FlowPanel(); + + private boolean enabled; + + List<T> selectedItems = new ArrayList<>(); + private final Parser<T> stringToT; + + int tabIndex; + char accessKey = 0; + + public CheckBoxGroup(Renderer<T> renderer, Parser<T> stringToT) { + this.stringToT = stringToT; + this.renderer = renderer; + initWidget(wrapperPanel); + } + + public void addCheckBoxOptions(T checkBoxLabel) { + if(checkBoxLabel == null) { + throw new IllegalArgumentException("null value is not permited"); //$NON-NLS-1$ + } + if(checkBoxes.containsKey(checkBoxLabel)) { + throw new IllegalArgumentException("Duplicate value: " + checkBoxLabel); //$NON-NLS-1$ + } + final CheckBox newCheckBox = new CheckBox(SafeHtmlUtils.fromTrustedString(renderer.render(checkBoxLabel))); + newCheckBox.setWidth("50px");//$NON-NLS-1$ + newCheckBox.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if (newCheckBox.getValue()) { + try { + selectedItems.add(stringToT.parse(newCheckBox.getText())); + } catch (ParseException e) { + throw new IllegalArgumentException(e.getMessage()); + } + } + } + }); + newCheckBox.getElement().getStyle().setMarginRight(50, Unit.PX); + checkBoxes.put(checkBoxLabel, newCheckBox); + FlowPanel fPanel = new FlowPanel(); + fPanel.add(newCheckBox); + panels.put(checkBoxLabel, fPanel); + wrapperPanel.add(fPanel); + } + + public List<T> getSelectedItems() { + return selectedItems; + } + + public void setSelections() { + Iterator<Entry<T, CheckBox>> iterator = checkBoxes.entrySet().iterator(); + while(iterator.hasNext()) { + Map.Entry<T, CheckBox> mapEntry = iterator.next(); + if(mapEntry.getValue().getValue()) { + selectedItems.add(mapEntry.getKey()); + } + } + } + + public void clearAllSelections() { + Iterator<Entry<T, CheckBox>> iterator = checkBoxes.entrySet().iterator(); + while(iterator.hasNext()) { + Map.Entry<T, CheckBox> mapEntry = iterator.next(); + mapEntry.getValue().setValue(false); + } + } + + public void setSelectedItems(List<T> itemsToSelect) { + clearAllSelections(); + Iterator<Entry<T, CheckBox>> iterator = checkBoxes.entrySet().iterator(); + while(iterator.hasNext()) { + Map.Entry<T, CheckBox> mapEntry = iterator.next(); + if(itemsToSelect.contains(mapEntry.getKey())) { + mapEntry.getValue().setValue(true); + } + } + } + + public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) { + return addDomHandler(handler, KeyUpEvent.getType()); + } + + public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) { + return addDomHandler(handler, KeyDownEvent.getType()); + } + + public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) { + return addDomHandler(handler, KeyPressEvent.getType()); + } + + @Override + public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) { + return addHandler(handler, ValueChangeEvent.getType()); + } + + @Override + public T getValue() { + return null; + } + + @Override + public void setValue(T value) { + if(!checkBoxes.containsKey(value)) { + addCheckBoxOptions(value); + } + setValue(value, false); + } + + @Override + public void setValue(T value, boolean fireEvents) { + setSelectedItems(Collections.singletonList(value)); + } + + @Override + public void setAcceptableValues(Collection<T> values) { + panels.clear(); + wrapperPanel.clear(); + if (values != null) { + for (final T value : values) { + if(! checkBoxes.containsKey(value)) { + addCheckBoxOptions(value); + } + } + } + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + Iterator<Entry<T, CheckBox>> iterator = checkBoxes.entrySet().iterator(); + while(iterator.hasNext()) { + Map.Entry<T, CheckBox> mapEntry = iterator.next(); + mapEntry.getValue().setValue(true); + } + } + + public int getTabIndex() { + return tabIndex; + } + + public void setAccessKey(char key) { + this.accessKey = key; + } + + public void setFocus(boolean focused) { + Iterator<Entry<T, CheckBox>> iterator = checkBoxes.entrySet().iterator(); + while(iterator.hasNext()) { + Map.Entry<T, CheckBox> mapEntry = iterator.next(); + if(selectedItems.contains(mapEntry.getValue())) { + mapEntry.getValue().setValue(focused); + } + } + } + + public void setTabIndex(int index) { + this.tabIndex = index; + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroup.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroup.java new file mode 100644 index 0000000..904bdf3 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroup.java @@ -0,0 +1,24 @@ +package org.ovirt.engine.ui.common.widget.editor; + +import com.google.gwt.editor.client.adapters.TakesValueEditor; +import com.google.gwt.text.shared.Parser; +import com.google.gwt.text.shared.Renderer; +import com.google.gwt.user.client.ui.HasConstrainedValue; + +public class ListModelCheckBoxGroup<T> extends CheckBoxGroup<T> implements EditorWidget<T, TakesValueEditor<T>>, HasConstrainedValue<T> { + + private TakesConstrainedValueEditor<T> editor; + + public ListModelCheckBoxGroup(Renderer<T> renderer, Parser<T> parser) { + super(renderer, parser); + } + + @Override + public TakesValueEditor<T> asEditor() { + if (editor == null) { + editor = TakesConstrainedValueEditor.of(this, this, this); + } + return editor; + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroupEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroupEditor.java new file mode 100644 index 0000000..cdfff53 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroupEditor.java @@ -0,0 +1,51 @@ +package org.ovirt.engine.ui.common.widget.editor; + +import java.util.List; + +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.dom.client.Style.BorderStyle; +import com.google.gwt.editor.client.IsEditor; +import com.google.gwt.text.shared.Parser; +import com.google.gwt.text.shared.Renderer; + +public class ListModelCheckBoxGroupEditor<T> extends AbstractValidatedWidgetWithLabel<T, ListModelCheckBoxGroup<T>> implements IsEditor<WidgetWithLabelEditor<T, ListModelCheckBoxGroupEditor<T>>>{ + + private final WidgetWithLabelEditor<T, ListModelCheckBoxGroupEditor<T>> editor; + + public ListModelCheckBoxGroupEditor() { + this(new StringRenderer<T>(), new VisibilityRenderer.SimpleVisibilityRenderer(), null); + } + + public ListModelCheckBoxGroupEditor(Parser<T> parser) { + this(new StringRenderer<T>(), new VisibilityRenderer.SimpleVisibilityRenderer(), parser); + } + + public ListModelCheckBoxGroupEditor(Renderer<T> renderer, VisibilityRenderer visibilityRenderer, Parser<T> parser) { + super(new ListModelCheckBoxGroup<T>(renderer, parser), visibilityRenderer); + this.editor = WidgetWithLabelEditor.of(getContentWidget().asEditor(), this); + } + + @Override + public void markAsValid() { + super.markAsValid(); + getValidatedWidgetStyle().setBorderStyle(BorderStyle.NONE); + } + + @Override + public void markAsInvalid(List<String> validationHints) { + super.markAsInvalid(validationHints); + getValidatedWidgetStyle().setBorderStyle(BorderStyle.SOLID); + } + + @Override + public WidgetWithLabelEditor<T, ListModelCheckBoxGroupEditor<T>> asEditor() { + return editor; + } + + public CheckBoxGroup<T> asCheckBoxGroup() { + return getContentWidget(); + } +} -- To view, visit http://gerrit.ovirt.org/37302 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I38daa0d2c151eb0e34603488496a8a1ea4719c87 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: anmolbabu <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
