Vojtech Szocs has uploaded a new change for review.

Change subject: webadmin,userportal: Support generic TextBoxLabel widget
......................................................................

webadmin,userportal: Support generic TextBoxLabel widget

1. Created TextBoxLabelBase (abstract class) with generic
   type parameter and common behavior taken from original
   TextBoxLabel widget

2. Modified TextBoxLabel to extend TextBoxLabelBase<String>
   with String-specific behavior taken from original
   TextBoxLabel widget

This patch is meant to support creating custom (type-specific)
TextBoxLabel widgets to replace any ValueLabel widgets within
"General" sub tab views to achieve consistent look & feel.

For example, it should allow replacing this:

   class VersionLabel
         extends ValueLabel<RpmVersion> ...

with this:

   class VersionTextBoxLabel
         extends TextBoxLabelBase<RpmVersion> ...

Change-Id: I728f7d6fdc74523ac397225c1c5833cb84f6eef9
Signed-off-by: Vojtech Szocs <vsz...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabel.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java
2 files changed, 100 insertions(+), 58 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/89/21289/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabel.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabel.java
index 63b6d03..fabf8d0 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabel.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabel.java
@@ -1,61 +1,40 @@
 package org.ovirt.engine.ui.common.widget.label;
 
+import java.text.ParseException;
+
 import org.ovirt.engine.ui.common.widget.renderer.EmptyValueRenderer;
 
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
-import com.google.gwt.dom.client.NativeEvent;
-import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.event.dom.client.BlurEvent;
 import com.google.gwt.event.dom.client.BlurHandler;
 import com.google.gwt.event.dom.client.FocusEvent;
 import com.google.gwt.event.dom.client.FocusHandler;
-import com.google.gwt.event.dom.client.MouseDownEvent;
-import com.google.gwt.event.dom.client.MouseDownHandler;
-import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.text.shared.Parser;
 
-public class TextBoxLabel extends TextBox {
+public class TextBoxLabel extends TextBoxLabelBase<String> {
 
-    private boolean handleEmptyValue = false;
-    private String unAvailablePropertyLabel = ""; //$NON-NLS-1$
-    private boolean hasFocus = false;
-    private String tooltipCaption = null;
-
-    public TextBoxLabel() {
-        setReadOnly(true);
-        getElement().getStyle().setBorderWidth(0, Unit.PX);
-        getElement().getStyle().setWidth(100, Unit.PCT);
-        addHandlers();
+    private static class StringParser implements Parser<String> {
+        @Override
+        public String parse(CharSequence text) throws ParseException {
+            return text.toString();
+        }
     }
 
-    protected void addHandlers() {
-        addDomHandler(new MouseDownHandler() {
+    private static class StringRenderer extends EmptyValueRenderer<String> {
+        @Override
+        public String render(String value) {
+            String renderedText = super.render(value);
+            renderedText = renderedText.replace("&lt;", "<"); //$NON-NLS-1$ 
//$NON-NLS-2$
+            return renderedText;
+        }
+    }
 
-            @Override
-            public void onMouseDown(MouseDownEvent event) {
-                if (event.getNativeButton() == NativeEvent.BUTTON_RIGHT) {
-                    setFocus(true);
-                    selectAll();
-                }
-            }
+    private boolean hasFocus = false;
+    private String tooltipCaption;
 
-        }, MouseDownEvent.getType());
-
-        addFocusHandler(new FocusHandler() {
-
-            @Override
-            public void onFocus(FocusEvent event) {
-                hasFocus = true;
-            }
-        });
-
-        addBlurHandler(new BlurHandler() {
-
-            @Override
-            public void onBlur(BlurEvent event) {
-                hasFocus = false;
-            }
-        });
+    public TextBoxLabel() {
+        super(new StringRenderer(), new StringParser());
     }
 
     public TextBoxLabel(String text) {
@@ -63,34 +42,54 @@
         setText(text);
     }
 
-    public TextBoxLabel(boolean handleEmptyValue, String 
unAvailablePropertyLabel) {
-        this();
-        this.handleEmptyValue = handleEmptyValue;
-        this.unAvailablePropertyLabel = unAvailablePropertyLabel;
+    @Override
+    protected void addHandlers() {
+        super.addHandlers();
+
+        addFocusHandler(new FocusHandler() {
+            @Override
+            public void onFocus(FocusEvent event) {
+                hasFocus = true;
+            }
+        });
+
+        addBlurHandler(new BlurHandler() {
+            @Override
+            public void onBlur(BlurEvent event) {
+                hasFocus = false;
+            }
+        });
+    }
+
+    /**
+     * Overridden to return "" from an empty text box.
+     *
+     * @see com.google.gwt.user.client.ui.TextBoxBase#getValue()
+     */
+    @Override
+    public String getValue() {
+        String raw = super.getValue();
+        return raw == null ? "" : raw; //$NON-NLS-1$
     }
 
     @Override
     public void setText(String text) {
-        String renderedText = new EmptyValueRenderer<String>(
-                handleEmptyValue ? unAvailablePropertyLabel : 
"").render(text); //$NON-NLS-1$
-        renderedText = unEscapeRenderedText(renderedText);
+        super.setText(text);
 
         final int cursorPosition = getCursorPos();
         final int selectionLength = getSelectionLength();
 
-        super.setText(renderedText);
+        String renderedText = text;
         if (getTooltipCaption() != null) {
             renderedText = getTooltipCaption() + ": " + renderedText; 
//$NON-NLS-1$
         }
         setTitle(renderedText);
 
         if (hasFocus) {
-
-            // needs to be deferred, because the setSelection works
+            // Needs to be deferred, because the setSelection works
             // only after the element has been attached to the document
             // which is not yet true
             Scheduler.get().scheduleDeferred(new ScheduledCommand() {
-
                 @Override
                 public void execute() {
                     setFocus(true);
@@ -98,11 +97,6 @@
                 }
             });
         }
-    }
-
-    private String unEscapeRenderedText(String renderedText) {
-        renderedText = renderedText.replace("&lt;", "<"); //$NON-NLS-1$ 
//$NON-NLS-2$
-        return renderedText;
     }
 
     public String getTooltipCaption() {
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java
new file mode 100644
index 0000000..3cb9fff
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java
@@ -0,0 +1,48 @@
+package org.ovirt.engine.ui.common.widget.label;
+
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.event.dom.client.MouseDownEvent;
+import com.google.gwt.event.dom.client.MouseDownHandler;
+import com.google.gwt.text.shared.Parser;
+import com.google.gwt.text.shared.Renderer;
+import com.google.gwt.user.client.ui.ValueBoxBase;
+
+/**
+ * Read-only text box widget used to render label values with added 
functionality.
+ * <p>
+ * This widget renders a border-less {@code <input type="text" readonly>} 
element. Right-clicking the input element
+ * causes the element to gain focus and select all text, so that the user can 
simply choose "Copy" within the context
+ * menu.
+ *
+ * @param <T>
+ *            Value type.
+ */
+public abstract class TextBoxLabelBase<T> extends ValueBoxBase<T> {
+
+    public TextBoxLabelBase(Renderer<T> renderer, Parser<T> parser) {
+        super(Document.get().createTextInputElement(), renderer, parser);
+        setReadOnly(true);
+        initStyles();
+        addHandlers();
+    }
+
+    protected void initStyles() {
+        getElement().getStyle().setBorderWidth(0, Unit.PX);
+        getElement().getStyle().setWidth(100, Unit.PCT);
+    }
+
+    protected void addHandlers() {
+        addDomHandler(new MouseDownHandler() {
+            @Override
+            public void onMouseDown(MouseDownEvent event) {
+                if (event.getNativeButton() == NativeEvent.BUTTON_RIGHT) {
+                    setFocus(true);
+                    selectAll();
+                }
+            }
+        }, MouseDownEvent.getType());
+    }
+
+}


-- 
To view, visit http://gerrit.ovirt.org/21289
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I728f7d6fdc74523ac397225c1c5833cb84f6eef9
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Vojtech Szocs <vsz...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to