Skip to content
Snippets Groups Projects
Commit aae385eb authored by izabel's avatar izabel
Browse files

[LMS-1208] add question mark link showing description

SVN: 14417
parent da638ca7
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
......@@ -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;
}
......
......@@ -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 = ":&nbsp;*";
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();
}
});
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment