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 <[email protected]>
---
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("<", "<"); //$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("<", "<"); //$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 <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches