IDEMPIERE-818 Zk: Focus always move back to first form field even when it is not needed.

This commit is contained in:
Heng Sin Low 2013-04-02 00:38:34 +08:00
parent 2475700b99
commit 97ede121b8
2 changed files with 31 additions and 7 deletions

View File

@ -40,6 +40,7 @@ import org.adempiere.webui.component.NumberBox;
import org.adempiere.webui.component.Row; import org.adempiere.webui.component.Row;
import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Rows;
import org.adempiere.webui.component.SimpleTreeModel; import org.adempiere.webui.component.SimpleTreeModel;
import org.adempiere.webui.component.Urlbox;
import org.adempiere.webui.editor.IZoomableEditor; import org.adempiere.webui.editor.IZoomableEditor;
import org.adempiere.webui.editor.WButtonEditor; import org.adempiere.webui.editor.WButtonEditor;
import org.adempiere.webui.editor.WEditor; import org.adempiere.webui.editor.WEditor;
@ -75,6 +76,7 @@ import org.compiere.util.Evaluatee;
import org.compiere.util.Msg; import org.compiere.util.Msg;
import org.compiere.util.Util; import org.compiere.util.Util;
import org.zkoss.zk.au.out.AuFocus; import org.zkoss.zk.au.out.AuFocus;
import org.zkoss.zk.au.out.AuScript;
import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.HtmlBasedComponent; import org.zkoss.zk.ui.HtmlBasedComponent;
@ -968,6 +970,14 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer
*/ */
@Override @Override
public void focusToFirstEditor() { public void focusToFirstEditor() {
focusToFirstEditor(false);
}
/**
*
* @param checkCurrent
*/
public void focusToFirstEditor(boolean checkCurrent) {
WEditor toFocus = null; WEditor toFocus = null;
for (WEditor editor : editors) { for (WEditor editor : editors) {
if (editor.isVisible() && editor.isReadWrite() && editor.getComponent().getParent() != null if (editor.isVisible() && editor.isReadWrite() && editor.getComponent().getParent() != null
@ -977,7 +987,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer
} }
} }
if (toFocus != null) { if (toFocus != null) {
focusToEditor(toFocus); focusToEditor(toFocus, checkCurrent);
} }
} }
@ -1316,7 +1326,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer
@Override @Override
public void focus() { public void focus() {
if (formContainer.isVisible()) if (formContainer.isVisible())
this.focusToFirstEditor(); this.focusToFirstEditor(true);
else else
listPanel.focus(); listPanel.focus();
} }
@ -1504,21 +1514,32 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer
} }
if (found) { if (found) {
if (editor.isVisible() && editor.isReadWrite()) { if (editor.isVisible() && editor.isReadWrite()) {
focusToEditor(editor); focusToEditor(editor, false);
break; break;
} }
} }
} }
} }
protected void focusToEditor(WEditor toFocus) { protected void focusToEditor(WEditor toFocus, boolean checkCurrent) {
Component c = toFocus.getComponent(); Component c = toFocus.getComponent();
if (c instanceof EditorBox) { if (c instanceof EditorBox) {
c = ((EditorBox)c).getTextbox(); c = ((EditorBox)c).getTextbox();
} else if (c instanceof NumberBox) { } else if (c instanceof NumberBox) {
c = ((NumberBox)c).getDecimalbox(); c = ((NumberBox)c).getDecimalbox();
} else if (c instanceof Urlbox) {
c = ((Urlbox)c).getTextbox();
} }
if (!checkCurrent) {
((HtmlBasedComponent)c).focus(); ((HtmlBasedComponent)c).focus();
} else {
StringBuilder script = new StringBuilder("var b=true;try{if (zk.currentFocus) {");
script.append("var p=zk.Widget.$('#").append(formContainer.getCenter().getUuid()).append("');");
script.append("if (zUtl.isAncestor(p, zk.currentFocus)) {");
script.append("b=false;}}}catch(error){}");
script.append("if(b){var w=zk.Widget.$('#").append(c.getUuid()).append("');w.focus(0);}");
Clients.response(new AuScript(script.toString()));
}
} }
} }

View File

@ -23,6 +23,7 @@ import org.adempiere.util.GridRowCtx;
import org.adempiere.webui.component.Checkbox; import org.adempiere.webui.component.Checkbox;
import org.adempiere.webui.component.EditorBox; import org.adempiere.webui.component.EditorBox;
import org.adempiere.webui.component.NumberBox; import org.adempiere.webui.component.NumberBox;
import org.adempiere.webui.component.Urlbox;
import org.adempiere.webui.editor.WButtonEditor; import org.adempiere.webui.editor.WButtonEditor;
import org.adempiere.webui.editor.WEditor; import org.adempiere.webui.editor.WEditor;
import org.adempiere.webui.editor.WEditorPopupMenu; import org.adempiere.webui.editor.WEditorPopupMenu;
@ -608,6 +609,8 @@ public class GridTabRowRenderer implements RowRenderer<Object[]>, RowRendererExt
c = ((EditorBox)c).getTextbox(); c = ((EditorBox)c).getTextbox();
} else if (c instanceof NumberBox) { } else if (c instanceof NumberBox) {
c = ((NumberBox)c).getDecimalbox(); c = ((NumberBox)c).getDecimalbox();
} else if (c instanceof Urlbox) {
c = ((Urlbox) c).getTextbox();
} }
((HtmlBasedComponent)c).focus(); ((HtmlBasedComponent)c).focus();
} }