From aae385ebbcb87c62ff9269fa9491b701383a56f5 Mon Sep 17 00:00:00 2001 From: izabel <izabel> Date: Mon, 25 Jan 2010 09:06:31 +0000 Subject: [PATCH] [LMS-1208] add question mark link showing description SVN: 14417 --- .../ui/AbstractRegistrationForm.java | 10 +-- .../ui/field/PropertyFieldFactory.java | 7 ++ .../application/ui/widget/FieldUtil.java | 74 +++++++++++++++++++ 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java index a93ca3f53ed..004cfd48566 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java @@ -55,6 +55,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable; */ public abstract class AbstractRegistrationForm extends ContentPanel { + private static final int PANEL_MARGIN = 100; + private static final String SESSION_KEY_PREFIX = "sessionKey_"; public static final String SESSION_KEYS_NUMBER = "sessionKeysNumber"; @@ -69,9 +71,9 @@ public abstract class AbstractRegistrationForm extends ContentPanel public static final int SECTION_FIELD_WIDTH = DEFAULT_FIELD_WIDTH; - public static final int SECTION_DEFAULT_FIELD_WIDTH = DEFAULT_FIELD_WIDTH - 15; + public static final int SECTION_DEFAULT_FIELD_WIDTH = DEFAULT_FIELD_WIDTH;// -15 - public static final int SECTION_WIDTH = SECTION_FIELD_WIDTH + SECTION_LABEL_WIDTH + 16; + public static final int SECTION_WIDTH = SECTION_FIELD_WIDTH + SECTION_LABEL_WIDTH + 60;// +16 protected InfoBox infoBox; @@ -152,7 +154,7 @@ public abstract class AbstractRegistrationForm extends ContentPanel panel.addClickListener(new InfoBoxResetListener(infoBox)); panel.setHeaderVisible(false); panel.setBodyBorder(false); - panel.setWidth(labelWidth + fieldWidth + 40); + panel.setWidth(labelWidth + fieldWidth + PANEL_MARGIN); panel.setLabelWidth(labelWidth); panel.setFieldWidth(fieldWidth); panel.setButtonAlign(HorizontalAlignment.RIGHT); @@ -310,8 +312,6 @@ public abstract class AbstractRegistrationForm extends ContentPanel protected final void addUploadFeatures(List<String> sessionKeys) { assert sessionKeysInitiated == false : "This method should be called only once."; - formPanel.setWidth(AbstractRegistrationForm.DEFAULT_LABEL_WIDTH - + AbstractRegistrationForm.DEFAULT_FIELD_WIDTH + 50); formPanel.setAction(GenericConstants.createServicePath("upload")); formPanel.setEncoding(Encoding.MULTIPART); formPanel.setMethod(Method.POST); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/PropertyFieldFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/PropertyFieldFactory.java index 62790a67f42..e3da8724c6f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/PropertyFieldFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/PropertyFieldFactory.java @@ -25,6 +25,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.VocabularyTermModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.DateRenderer; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; @@ -43,6 +45,11 @@ public class PropertyFieldFactory doCreateField(pt, isMandatory, label, fieldId, originalRawValue, viewContext); Field<?> field = fieldHolder.get(); field.setId(fieldId); + String description = pt.getDescription(); + if (StringUtils.isBlank(description) == false) + { + FieldUtil.addInfoIcon(field, description); + } return fieldHolder; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/FieldUtil.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/FieldUtil.java index 06969d0ec33..a8a9c25dcb1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/FieldUtil.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/FieldUtil.java @@ -16,8 +16,23 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget; +import com.extjs.gxt.ui.client.GXT; +import com.extjs.gxt.ui.client.event.BaseEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.widget.ComponentHelper; +import com.extjs.gxt.ui.client.widget.MessageBox; +import com.extjs.gxt.ui.client.widget.WidgetComponent; import com.extjs.gxt.ui.client.widget.form.Field; import com.extjs.gxt.ui.client.widget.form.TextField; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.DeferredCommand; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.ui.Widget; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer; /** * Utilities for {@link Field} class. @@ -26,6 +41,13 @@ import com.extjs.gxt.ui.client.widget.form.TextField; */ public class FieldUtil { + private static final String INFO_LINK_LABEL = "[?]"; + + private static final int[] INFO_LINK_FIELD_OFFSETS = new int[] + { 20, 3 }; + + private static final String INFO_LINK_POSITION = "tl-tr"; + private static final String MANDATORY_LABEL_SEPARATOR = ": *"; public static void setMandatoryFlag(Field<?> field, boolean isMandatory) @@ -83,4 +105,56 @@ public class FieldUtil field.validate(); } } + + /** + * Adds '?' to the field and allows to display chosen message in the info box. + */ + public static void addInfoIcon(final Field<?> field, final String message) + { + // WORKAROUND: Based on GXT functionality for displaying error icon, until there is no + // dedicated mechanism for showing info icons in GXT + field.addListener(Events.Render, new Listener<BaseEvent>() + { + public void handleEvent(BaseEvent be) + { + final Widget detailsLink = + LinkRenderer.getLinkWidget(INFO_LINK_LABEL, new ClickHandler() + { + public void onClick(ClickEvent event) + { + MessageBox.info("Info", message, null); + } + }); + final WidgetComponent info = new WidgetComponent(detailsLink); + Element parent = field.el().getParent().dom; + info.render(parent); + info.setStyleAttribute("display", "block"); + info.el().makePositionable(true); + if (!info.isAttached()) + { + ComponentHelper.doAttach(info); + } + DeferredCommand.addCommand(new Command() + { + public void execute() + { + info.el().alignTo(field.getElement(), INFO_LINK_POSITION, + INFO_LINK_FIELD_OFFSETS); + } + }); + if (GXT.isIE || GXT.isOpera) + { + DeferredCommand.addCommand(new Command() + { + public void execute() + { + info.el().alignTo(field.getElement(), INFO_LINK_POSITION, + INFO_LINK_FIELD_OFFSETS); + } + }); + } + field.el().repaint(); + } + }); + } } -- GitLab