IDEMPIERE-2311:bad behavior of info window when after select a record and push enter key

This commit is contained in:
hieplq 2015-01-08 01:36:53 +07:00
parent 39c73c6eb7
commit 53a3a38fb8
2 changed files with 79 additions and 9 deletions

View File

@ -23,6 +23,7 @@ import org.adempiere.webui.component.Column;
import org.adempiere.webui.component.Columns; import org.adempiere.webui.component.Columns;
import org.adempiere.webui.component.Combobox; import org.adempiere.webui.component.Combobox;
import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.ConfirmPanel;
import org.adempiere.webui.component.EditorBox;
import org.adempiere.webui.component.Grid; import org.adempiere.webui.component.Grid;
import org.adempiere.webui.component.GridFactory; import org.adempiere.webui.component.GridFactory;
import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Label;
@ -84,6 +85,7 @@ import org.zkoss.zul.North;
import org.zkoss.zul.Separator; import org.zkoss.zul.Separator;
import org.zkoss.zul.South; import org.zkoss.zul.South;
import org.zkoss.zul.Space; import org.zkoss.zul.Space;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Vbox; import org.zkoss.zul.Vbox;
/** /**
@ -810,6 +812,42 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
return null; return null;
} }
/**
* Check has new parameter is change or new input
* in case first time search, return true
* @return
*/
protected boolean isParameteChangeValue (){
if (prevParameterValues == null){
// never process query, because consider as changed value to process current search
return true;
}
// compare old and new value of parameter input at prev time
for (int parameterIndex = 0; parameterIndex < prevParameterValues.size(); parameterIndex++){
Object newValue = prevRefParmeterEditor.get(parameterIndex).getValue();
if (!prevParameterValues.get(parameterIndex).equals(newValue)){
return true;
}
}
// in case new field is entered value
for(WEditor editor : editors) {
if (!editor.isVisible() || prevRefParmeterEditor.contains(editor))
continue;
if (editor.getGridField() != null && editor.getValue() != null && editor.getValue().toString().trim().length() > 0) {
MInfoColumn mInfoColumn = findInfoColumn(editor.getGridField());
if (mInfoColumn == null || mInfoColumn.getSelectClause().equals("0")) {
continue;
}
return true;
}
}
return false;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.adempiere.webui.panel.InfoPanel#setParameters(java.sql.PreparedStatement, boolean) * @see org.adempiere.webui.panel.InfoPanel#setParameters(java.sql.PreparedStatement, boolean)
*/ */
@ -828,9 +866,11 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
if (prevParameterValues == null){ if (prevParameterValues == null){
prevParameterValues = new ArrayList<Object> (); prevParameterValues = new ArrayList<Object> ();
prevQueryOperators = new ArrayList<String> (); prevQueryOperators = new ArrayList<String> ();
prevRefParmeterEditor = new ArrayList<WEditor>();
}else{ }else{
prevParameterValues.clear(); prevParameterValues.clear();
prevQueryOperators.clear(); prevQueryOperators.clear();
prevRefParmeterEditor.clear();
} }
int parameterIndex = 0; int parameterIndex = 0;
@ -847,6 +887,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
parameterIndex++; parameterIndex++;
prevParameterValues.add(value); prevParameterValues.add(value);
prevQueryOperators.add(mInfoColumn.getQueryOperator()); prevQueryOperators.add(mInfoColumn.getQueryOperator());
prevRefParmeterEditor.add(editor);
setParameter (pstmt, parameterIndex, value, mInfoColumn.getQueryOperator()); setParameter (pstmt, parameterIndex, value, mInfoColumn.getQueryOperator());
} }
} }
@ -1439,6 +1480,35 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
SessionManager.getAppDesktop().updateHelpTooltip(selectedValue.get_Translation(MProcess.COLUMNNAME_Name), selectedValue.get_Translation(MProcess.COLUMNNAME_Description), selectedValue.get_Translation(MProcess.COLUMNNAME_Help), null); SessionManager.getAppDesktop().updateHelpTooltip(selectedValue.get_Translation(MProcess.COLUMNNAME_Name), selectedValue.get_Translation(MProcess.COLUMNNAME_Description), selectedValue.get_Translation(MProcess.COLUMNNAME_Help), null);
} }
}else if (event.getName().equals(Events.ON_OK) && event.getTarget() != null){ // event when push enter at parameter
Component tagetComponent = event.getTarget();
boolean isCacheEvent = false;// when event from parameter component, catch it and process at there
for(WEditor editor : editors) {
Component editorComponent = editor.getComponent();
if (editorComponent instanceof EditorBox){
editorComponent = ((EditorBox)editorComponent).getTextbox();
}
if (editorComponent.equals(tagetComponent)){
isCacheEvent = true;
break;
}
}
if (isCacheEvent){
boolean isParameterChange = isParameteChangeValue();
// when change parameter, also requery
if (isParameterChange){
onUserQuery();
}else if (m_lookup && contentPanel.getSelectedIndex() >= 0){
// do nothing when parameter not change and at window mode, or at dialog mode but select non record
onOk();
}else {
// parameter not change. do nothing.
}
}else{
super.onEvent(event);
}
} }
else else
{ {
@ -1510,7 +1580,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
if (dynWhere.length() > 0) if (dynWhere.length() > 0)
sql.append(dynWhere); // includes first AND sql.append(dynWhere); // includes first AND
String countSql = Msg.parseTranslation(Env.getCtx(), sql.toString()); // Variables String countSql = Msg.parseTranslation(Env.getCtx(), sql.toString()); // Variables
if (countSql.trim().endsWith("WHERE")) { if (countSql.trim().endsWith("WHERE")) {
countSql = countSql.trim(); countSql = countSql.trim();

View File

@ -325,6 +325,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
*/ */
protected List<Object> prevParameterValues = null; protected List<Object> prevParameterValues = null;
protected List<String> prevQueryOperators = null; protected List<String> prevQueryOperators = null;
protected List<WEditor> prevRefParmeterEditor = null;
private static final String[] lISTENER_EVENTS = {}; private static final String[] lISTENER_EVENTS = {};
/** /**
@ -1368,6 +1369,11 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
if (LayoutUtils.isReallyVisible(this)) { if (LayoutUtils.isReallyVisible(this)) {
this.onCtrlKeyEvent(keyEvent); this.onCtrlKeyEvent(keyEvent);
} }
}else if (event.getName().equals(Events.ON_OK)){// on ok when focus at non parameter component. example grid result
if (m_lookup && contentPanel.getSelectedIndex() >= 0){
// do nothing when parameter not change and at window mode, or at dialog mode but select non record
onOk();
}
} }
//when user push enter keyboard at input parameter field //when user push enter keyboard at input parameter field
else else
@ -1388,13 +1394,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
} }
} }
} else if (keyEvent.getKeyCode() == VK_ENTER) { // Enter } else if (keyEvent.getKeyCode() == VK_ENTER) { // Enter
// enter in contentpanel to select // do nothing, let on_ok at infoWindo do, at this is too soon to get value from control, it's not bind
//when user push enter keyboard at input parameter field
if (m_lookup && contentPanel.getSelectedIndex() >= 0) {
onOk();
} else {
onUserQuery();
}
} else if (keyEvent.getKeyCode() == VK_ESCAPE) { // Escape } else if (keyEvent.getKeyCode() == VK_ESCAPE) { // Escape
// Escape for cancel // Escape for cancel
m_cancel = true; m_cancel = true;
@ -1573,7 +1573,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
*/ */
protected void bindInfoProcess (){} protected void bindInfoProcess (){}
private void onOk() protected void onOk()
{ {
if (!contentPanel.getChildren().isEmpty() && contentPanel.getSelectedRowKey()!=null) if (!contentPanel.getChildren().isEmpty() && contentPanel.getSelectedRowKey()!=null)
{ {