IDEMPIERE-786 ZK: Remove onFocus and onBlur server side event for field editor.

This commit is contained in:
Heng Sin Low 2013-03-21 13:39:45 +08:00
parent b2063cc784
commit 8af496019d
6 changed files with 69 additions and 61 deletions

View File

@ -48,7 +48,7 @@ import org.adempiere.webui.editor.WImageEditor;
import org.adempiere.webui.editor.WPaymentEditor; import org.adempiere.webui.editor.WPaymentEditor;
import org.adempiere.webui.editor.WebEditorFactory; import org.adempiere.webui.editor.WebEditorFactory;
import org.adempiere.webui.event.ContextMenuListener; import org.adempiere.webui.event.ContextMenuListener;
import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.panel.HelpController;
import org.adempiere.webui.util.GridTabDataBinder; import org.adempiere.webui.util.GridTabDataBinder;
import org.adempiere.webui.util.TreeUtils; import org.adempiere.webui.util.TreeUtils;
import org.adempiere.webui.window.FDialog; import org.adempiere.webui.window.FDialog;
@ -527,8 +527,11 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer
if (editor != null) // Not heading if (editor != null) // Not heading
{ {
editor.getComponent().addEventListener(Events.ON_FOCUS, this); editor.getComponent().setWidgetOverride("fieldHeader", HelpController.escapeJavascriptContent(field.getHeader()));
editor.getComponent().addEventListener(Events.ON_BLUR, this); editor.getComponent().setWidgetOverride("fieldDescription", HelpController.escapeJavascriptContent(field.getDescription()));
editor.getComponent().setWidgetOverride("fieldHelp", HelpController.escapeJavascriptContent(field.getHelp()));
editor.getComponent().setWidgetListener("onFocus", "zWatch.fire('onFieldTooltip', this, null, this.fieldHeader, this.fieldDescription, this.fieldHelp);");
editor.getComponent().setWidgetListener("onBlur", "zWatch.fire('onFieldTooltip', this);");
editor.setGridTab(this.getGridTab()); editor.setGridTab(this.getGridTab());
field.addPropertyChangeListener(editor); field.addPropertyChangeListener(editor);
@ -968,7 +971,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer
public void focusToFirstEditor() { public void focusToFirstEditor() {
WEditor toFocus = null; WEditor toFocus = null;
for (WEditor editor : editors) { for (WEditor editor : editors) {
if (editor.isHasFocus() && editor.isVisible() && editor.getComponent().getParent() != null) { if (editor.isVisible() && editor.getComponent().getParent() != null) {
toFocus = editor; toFocus = editor;
break; break;
} }
@ -1047,26 +1050,6 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer
Env.getCtx().setProperty("P"+windowId+"|"+adTabId+"|DetailPane.IsOpen", value ? "Y" : "N"); Env.getCtx().setProperty("P"+windowId+"|"+adTabId+"|DetailPane.IsOpen", value ? "Y" : "N");
} }
} }
else if (event.getName().equals(Events.ON_FOCUS)) {
for (WEditor editor : editors)
{
if (editor.isComponentOfEditor(event.getTarget()))
{
SessionManager.getAppDesktop().updateHelpTooltip(editor.getGridField());
return;
}
}
}
else if (event.getName().equals(Events.ON_BLUR)) {
for (WEditor editor : editors)
{
if (editor.isComponentOfEditor(event.getTarget()))
{
SessionManager.getAppDesktop().updateHelpTooltip(null);
return;
}
}
}
} }
private void onSouthEvent(SouthEvent event) { private void onSouthEvent(SouthEvent event) {
@ -1351,14 +1334,10 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer
*/ */
public void setFocusToField(String columnName) { public void setFocusToField(String columnName) {
if (formContainer.isVisible()) { if (formContainer.isVisible()) {
boolean found = false;
for (WEditor editor : editors) { for (WEditor editor : editors) {
if (found) if (columnName.equals(editor.getColumnName())) {
editor.setHasFocus(false);
else if (columnName.equals(editor.getColumnName())) {
editor.setHasFocus(true);
Clients.response(new AuFocus(editor.getComponent())); Clients.response(new AuFocus(editor.getComponent()));
found = true; break;
} }
} }
} else { } else {

View File

@ -30,6 +30,7 @@ import org.adempiere.webui.editor.WebEditorFactory;
import org.adempiere.webui.event.ActionEvent; import org.adempiere.webui.event.ActionEvent;
import org.adempiere.webui.event.ActionListener; import org.adempiere.webui.event.ActionListener;
import org.adempiere.webui.event.ContextMenuListener; import org.adempiere.webui.event.ContextMenuListener;
import org.adempiere.webui.panel.HelpController;
import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.util.GridTabDataBinder; import org.adempiere.webui.util.GridTabDataBinder;
import org.compiere.model.GridField; import org.compiere.model.GridField;
@ -376,6 +377,12 @@ public class GridTabRowRenderer implements RowRenderer<Object[]>, RowRendererExt
WEditor readOnlyEditor = WebEditorFactory.getEditor(gridPanelFields[i], true); WEditor readOnlyEditor = WebEditorFactory.getEditor(gridPanelFields[i], true);
readOnlyEditor.setReadWrite(false); readOnlyEditor.setReadWrite(false);
readOnlyEditors.put(gridPanelFields[i], readOnlyEditor); readOnlyEditors.put(gridPanelFields[i], readOnlyEditor);
editor.getComponent().setWidgetOverride("fieldHeader", HelpController.escapeJavascriptContent(gridPanelFields[i].getHeader()));
editor.getComponent().setWidgetOverride("fieldDescription", HelpController.escapeJavascriptContent(gridPanelFields[i].getDescription()));
editor.getComponent().setWidgetOverride("fieldHelp", HelpController.escapeJavascriptContent(gridPanelFields[i].getHelp()));
editor.getComponent().setWidgetListener("onFocus", "zWatch.fire('onFieldTooltip', this, null, this.fieldHeader, this.fieldDescription, this.fieldHelp);");
editor.getComponent().setWidgetListener("onBlur", "zWatch.fire('onFieldTooltip', this);");
} }
if (!gridPanelFields[i].isDisplayedGrid() || gridPanelFields[i].isToolbarButton()) { if (!gridPanelFields[i].isDisplayedGrid() || gridPanelFields[i].isToolbarButton()) {
@ -578,7 +585,7 @@ public class GridTabRowRenderer implements RowRenderer<Object[]>, RowRendererExt
WEditor toFocus = null; WEditor toFocus = null;
WEditor firstEditor = null; WEditor firstEditor = null;
for (WEditor editor : getEditors()) { for (WEditor editor : getEditors()) {
if (editor.isHasFocus() && editor.isVisible() && editor.getComponent().getParent() != null) { if (editor.isVisible() && editor.getComponent().getParent() != null) {
toFocus = editor; toFocus = editor;
break; break;
} }

View File

@ -796,12 +796,8 @@ public class GridView extends Vbox implements EventListener<Event>, IdSpace, IFi
* @param columnName * @param columnName
*/ */
public void setFocusToField(String columnName) { public void setFocusToField(String columnName) {
boolean found = false;
for (WEditor editor : renderer.getEditors()) { for (WEditor editor : renderer.getEditors()) {
if (found) if (columnName.equals(editor.getColumnName())) {
editor.setHasFocus(false);
else if (columnName.equals(editor.getColumnName())) {
editor.setHasFocus(true);
Component c = editor.getComponent(); Component c = editor.getComponent();
if (c instanceof EditorBox) { if (c instanceof EditorBox) {
c = ((EditorBox)c).getTextbox(); c = ((EditorBox)c).getTextbox();
@ -809,7 +805,7 @@ public class GridView extends Vbox implements EventListener<Event>, IdSpace, IFi
c = ((NumberBox)c).getDecimalbox(); c = ((NumberBox)c).getDecimalbox();
} }
Clients.response(new AuFocus(c)); Clients.response(new AuFocus(c));
found = true; break;
} }
} }
} }

View File

@ -331,7 +331,6 @@ public class WCreateFromShipmentUI extends CreateFromShipment implements EventLi
} }
} }
upcField.setValue(""); upcField.setValue("");
upcField.setHasFocus(true);
} }
/** /**

View File

@ -88,8 +88,6 @@ public abstract class WEditor implements EventListener<Event>, PropertyChangeLis
private String columnName; private String columnName;
protected boolean hasFocus;
protected WEditorPopupMenu popupMenu; protected WEditorPopupMenu popupMenu;
private boolean tableEditor; private boolean tableEditor;
@ -230,18 +228,8 @@ public abstract class WEditor implements EventListener<Event>, PropertyChangeLis
{ {
component.addEventListener(event, this); component.addEventListener(event, this);
} }
component.addEventListener(Events.ON_FOCUS, new EventListener<Event>() {
public void onEvent(Event event) throws Exception {
hasFocus = true;
}
}); component.setAttribute("idempiere.editor", this);
component.addEventListener(Events.ON_BLUR, new EventListener<Event>() {
public void onEvent(Event event) throws Exception {
hasFocus = false;
}
});
} }
/** /**
@ -545,14 +533,6 @@ public abstract class WEditor implements EventListener<Event>, PropertyChangeLis
} }
} }
public boolean isHasFocus() {
return hasFocus;
}
public void setHasFocus(boolean b) {
hasFocus = b;
}
public void updateLabelStyle() { public void updateLabelStyle() {
if (getLabel() != null) { if (getLabel() != null) {
String style = (isZoomable() ? STYLE_ZOOMABLE_LABEL : "") + (isMandatoryStyle() ? STYLE_EMPTY_MANDATORY_LABEL : STYLE_NORMAL_LABEL); String style = (isZoomable() ? STYLE_ZOOMABLE_LABEL : "") + (isMandatoryStyle() ? STYLE_EMPTY_MANDATORY_LABEL : STYLE_NORMAL_LABEL);

View File

@ -40,7 +40,9 @@ import org.compiere.util.Env;
import org.compiere.util.Msg; import org.compiere.util.Msg;
import org.compiere.wf.MWFNode; import org.compiere.wf.MWFNode;
import org.compiere.wf.MWorkflow; import org.compiere.wf.MWorkflow;
import org.zkoss.zk.au.out.AuScript;
import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Anchorchildren; import org.zkoss.zul.Anchorchildren;
import org.zkoss.zul.Anchorlayout; import org.zkoss.zul.Anchorlayout;
import org.zkoss.zul.Html; import org.zkoss.zul.Html;
@ -95,6 +97,15 @@ public class HelpController
Panelchildren content = new Panelchildren(); Panelchildren content = new Panelchildren();
pnlToolTip.appendChild(content); pnlToolTip.appendChild(content);
content.appendChild(htmlToolTip = new Html()); content.appendChild(htmlToolTip = new Html());
htmlToolTip.setWidgetOverride("defaultMessage", "'"+Msg.getMsg(Env.getCtx(), "PlaceCursorIntoField")+"'");
htmlToolTip.setWidgetOverride("onFieldTooltip", "function(origin,opts,header,description,help)" +
"{var s='<html><body><div class=\"help-content\">';" +
"if (typeof header == 'undefined') {s=s+'<i>'+this.defaultMessage+'</i>';} " +
"else {s=s+'<b>'+header+'</b>';" +
"if (typeof description=='string' && description.length > 0) {s=s+'<br><br><i>'+description+'</i>';}" +
"if (typeof help=='string' && help.length > 0) {s=s+'<br><br>'+help;}}" +
"s=s+'</div></body></html>';this.setContent(s);}");
Clients.response(new AuScript(htmlToolTip, "var w=zk.Widget.$('#"+htmlToolTip.getUuid()+"');zWatch.listen({onFieldTooltip: w});"));
pnlContextHelp = new Panel(); pnlContextHelp = new Panel();
pnlContextHelp.setSclass("dashboard-widget"); pnlContextHelp.setSclass("dashboard-widget");
@ -424,4 +435,40 @@ public class HelpController
return ""; return "";
} }
/**
* @param content content
* @return masked content or empty string if the <code>content</code> is null
*/
public static String escapeJavascriptContent(String content)
{
// If the content is null, then return ''
if (content == null)
return "''";
//
StringBuilder out = new StringBuilder("'");
char[] chars = content.toCharArray();
for (int i = 0; i < chars.length; i++)
{
char c = chars[i];
switch (c)
{
case '\r':
out.append ("");
break;
case '\'':
out.append ("\\'");
break;
case '\n':
out.append ("<br>");
break;
//
default:
out.append(c);
break;
}
}
out.append("'");
return out.toString();
} // maskHTML
} }