IDEMPIERE-5851 - Set Focus Automatically to the 1st Row of the Info Window Result Set (#2001)

* IDEMPIERE-5851 - Set Focus Automatically to the 1st Row of the Info Window Result Set

* IDEMPIERE-5851 - pr2001 patch by Heng Sin

* IDEMPIERE-5851 - remove unintended change
This commit is contained in:
Peter Takács 2023-10-30 08:27:10 +01:00 committed by GitHub
parent 7f2f0f2591
commit 72c00ff0d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 31 additions and 2 deletions

View File

@ -25,6 +25,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
@ -104,6 +105,7 @@ import org.compiere.util.ValueNamePair;
import org.zkoss.zk.au.out.AuEcho;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.HtmlBasedComponent;
import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
@ -1018,6 +1020,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
restoreSelectedInPage();
updateStatusBar (m_count);
setStatusSelected ();
setFocusToContentPanel();
addDoubleClickListener();
if (paging != null && paging.getParent() == null)
@ -1843,8 +1846,9 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
@SuppressWarnings("unchecked")
List<Object> candidateRecord = (List<Object>)contentPanel.getModel().get(rowIndex);
if (contentPanel.getModel().isSelected(candidateRecord)){
int ri = rowIndex;
if (contentPanel.getModel().isSelected(candidateRecord) || Arrays.stream(contentPanel.getSelectedIndices()).anyMatch(si -> si==ri)){
recordSelectedData.put(keyCandidate, candidateRecord);// add or update selected record info
}else{
if (recordSelectedData.containsKey(keyCandidate)){// unselected record
@ -2268,6 +2272,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
}else if (event.getTarget() == contentPanel && event.getName().equals("onAfterRender")){
//IDEMPIERE-1334 at this event selected item from listBox and model is sync
enableButtons();
setFocusToContentPanel();
}
else if (event.getTarget() == contentPanel && event.getName().equals(Events.ON_DOUBLE_CLICK))
{
@ -3525,4 +3530,28 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
List<Object> lastSelectedRow = m_rowSelectionOrder.size() > 0 ? getSelectedRowInfo().get(m_rowSelectionOrder.get(index)) : null;
return lastSelectedRow;
}
/**
* Set focus to {@link #contentPanel}:<br/>
* - Single selection: auto select first item and set focus to it.<br/>
* - Multiple selection: set focus to first item.
*/
private void setFocusToContentPanel() {
if(contentPanel.getRowCount() > 0) {
if(p_multipleSelection) {
((HtmlBasedComponent)contentPanel.getItems().get(0)).focus();
}
else {
if(contentPanel.getSelectedItem() == null)
contentPanel.setSelectedIndex(0);
((HtmlBasedComponent)contentPanel.getSelectedItem()).focus();
contentPanel.getSelectedItem().setSelected(true);
}
setStatusSelected ();
m_lastSelectedIndex = 0;
}
}
} // Info