1006181 Speed-up windows - Field to show read-only grid. Fixed NPE and Grid View exception. (IDEMPIERE-3269)
This commit is contained in:
parent
3d1c1aea15
commit
fda19e207d
|
@ -20,6 +20,7 @@ import java.util.Set;
|
|||
|
||||
import org.adempiere.webui.ValuePreference;
|
||||
import org.adempiere.webui.component.Listbox;
|
||||
import org.adempiere.webui.component.Textbox;
|
||||
import org.adempiere.webui.editor.WEditor;
|
||||
import org.adempiere.webui.editor.WEditorPopupMenu;
|
||||
import org.adempiere.webui.event.ContextMenuEvent;
|
||||
|
@ -33,6 +34,7 @@ import org.compiere.model.GridWindow;
|
|||
import org.compiere.util.Env;
|
||||
import org.compiere.util.Msg;
|
||||
import org.compiere.util.Util;
|
||||
import org.zkoss.zk.ui.HtmlBasedComponent;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zul.ListModel;
|
||||
|
@ -56,41 +58,50 @@ public class WGridTabMultiSelectionEditor extends WEditor implements ContextMenu
|
|||
|
||||
private String currentLinkValue = null;
|
||||
|
||||
private boolean readWrite;
|
||||
|
||||
public WGridTabMultiSelectionEditor(GridField gridField) {
|
||||
this(gridField, false);
|
||||
}
|
||||
|
||||
public WGridTabMultiSelectionEditor(GridField gridField, boolean tableEditor)
|
||||
{
|
||||
super(new GridTabSelectionListView(true, gridField.getWindowNo()), gridField);
|
||||
super(tableEditor ? new Textbox() : new GridTabSelectionListView(true, gridField.getWindowNo()), gridField);
|
||||
this.tableEditor = tableEditor;
|
||||
init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GridTabSelectionListView getComponent() {
|
||||
return (GridTabSelectionListView) component;
|
||||
public HtmlBasedComponent getComponent() {
|
||||
return (HtmlBasedComponent) component;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReadWrite() {
|
||||
return !getComponent().getListbox().isEnabled();
|
||||
return readWrite;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setReadWrite(boolean readWrite) {
|
||||
getComponent().getListbox().setEnabled(readWrite);
|
||||
if (getComponent() instanceof GridTabSelectionListView) {
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
listView.getListbox().setEnabled(readWrite);
|
||||
}
|
||||
this.readWrite = readWrite;
|
||||
}
|
||||
|
||||
private void init()
|
||||
{
|
||||
if (tableEditor)
|
||||
setVisible(false);
|
||||
{
|
||||
((Textbox)getComponent()).setReadonly(true);
|
||||
}
|
||||
else if (gridField != null && gridField.getGridTab() != null)
|
||||
{
|
||||
int AD_Tab_ID = gridField.getIncluded_Tab_ID();
|
||||
GridWindow gridWindow = gridField.getGridTab().getGridWindow();
|
||||
int count = gridWindow.getTabCount();
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
GridTab t = gridWindow.getTab(i);
|
||||
|
@ -104,7 +115,7 @@ public class WGridTabMultiSelectionEditor extends WEditor implements ContextMenu
|
|||
lcn = t.getLinkColumnName();
|
||||
}
|
||||
listViewGridTab.setLinkColumnName(lcn);
|
||||
getComponent().init(listViewGridTab);
|
||||
listView.init(listViewGridTab);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -115,7 +126,7 @@ public class WGridTabMultiSelectionEditor extends WEditor implements ContextMenu
|
|||
clear.addEventListener(Events.ON_CLICK, popupMenu);
|
||||
popupMenu.appendChild(clear);
|
||||
|
||||
getComponent().getListbox().setContext(popupMenu);
|
||||
listView.getListbox().setContext(popupMenu);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -124,7 +135,8 @@ public class WGridTabMultiSelectionEditor extends WEditor implements ContextMenu
|
|||
if (Events.ON_SELECT.equals(event.getName()))
|
||||
{
|
||||
Object newValue = null;
|
||||
Listbox listbox = getComponent().getListbox();
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
Listbox listbox = listView.getListbox();
|
||||
ListModel<GridTableRow> model = listbox.getModel();
|
||||
if (model != null && model instanceof Selectable<?>)
|
||||
{
|
||||
|
@ -142,7 +154,7 @@ public class WGridTabMultiSelectionEditor extends WEditor implements ContextMenu
|
|||
}
|
||||
else
|
||||
{
|
||||
int[] selection = getComponent().getListbox().getSelectedIndices();
|
||||
int[] selection = listView.getListbox().getSelectedIndices();
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
for(int rowIndex : selection)
|
||||
{
|
||||
|
@ -190,10 +202,14 @@ public class WGridTabMultiSelectionEditor extends WEditor implements ContextMenu
|
|||
return;
|
||||
}
|
||||
oldValue = value;
|
||||
if (!tableEditor)
|
||||
updateSlectedIndices();
|
||||
else
|
||||
((Textbox)getComponent()).setValue(oldValue != null ? oldValue.toString() : "");
|
||||
}
|
||||
|
||||
private void updateSlectedIndices() {
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
if (!Util.isEmpty((String)oldValue))
|
||||
{
|
||||
List<Integer> list = new ArrayList<Integer>();
|
||||
|
@ -212,11 +228,11 @@ public class WGridTabMultiSelectionEditor extends WEditor implements ContextMenu
|
|||
{
|
||||
selectedIndices[i] = list.get(i);
|
||||
}
|
||||
getComponent().setSelectedIndices(selectedIndices);
|
||||
listView.setSelectedIndices(selectedIndices);
|
||||
}
|
||||
else
|
||||
{
|
||||
getComponent().clearSelection();
|
||||
listView.clearSelection();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -248,14 +264,17 @@ public class WGridTabMultiSelectionEditor extends WEditor implements ContextMenu
|
|||
|
||||
@Override
|
||||
public void dynamicDisplay() {
|
||||
if (!tableEditor && listViewGridTab != null) {
|
||||
String name = listViewGridTab.getLinkColumnName();
|
||||
String linkValue = Env.getContext(Env.getCtx(), gridField.getWindowNo(), name);
|
||||
if ((currentLinkValue == null && linkValue != null)
|
||||
|| (currentLinkValue != null && linkValue == null)
|
||||
|| (currentLinkValue != null && linkValue != null && !currentLinkValue.equals(linkValue)))
|
||||
{
|
||||
getComponent().refresh(listViewGridTab);
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
listView.refresh(listViewGridTab);
|
||||
updateSlectedIndices();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
package org.adempiere.webui.editor.grid.selection;
|
||||
|
||||
import org.adempiere.webui.ValuePreference;
|
||||
import org.adempiere.webui.component.Textbox;
|
||||
import org.adempiere.webui.editor.WEditor;
|
||||
import org.adempiere.webui.editor.WEditorPopupMenu;
|
||||
import org.adempiere.webui.event.ContextMenuEvent;
|
||||
|
@ -28,6 +29,7 @@ import org.compiere.model.GridWindow;
|
|||
import org.compiere.util.Env;
|
||||
import org.compiere.util.Msg;
|
||||
import org.compiere.util.Util;
|
||||
import org.zkoss.zk.ui.HtmlBasedComponent;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zul.Menuitem;
|
||||
|
@ -49,41 +51,50 @@ public class WGridTabSingleSelectionEditor extends WEditor implements ContextMen
|
|||
|
||||
private String currentLinkValue = null;
|
||||
|
||||
private boolean readWrite;
|
||||
|
||||
public WGridTabSingleSelectionEditor(GridField gridField) {
|
||||
this(gridField, false);
|
||||
}
|
||||
|
||||
public WGridTabSingleSelectionEditor(GridField gridField, boolean tableEditor)
|
||||
{
|
||||
super(new GridTabSelectionListView(false, gridField.getWindowNo()), gridField);
|
||||
super(tableEditor ? new Textbox() : new GridTabSelectionListView(false, gridField.getWindowNo()), gridField);
|
||||
this.tableEditor = tableEditor;
|
||||
init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GridTabSelectionListView getComponent() {
|
||||
return (GridTabSelectionListView) component;
|
||||
public HtmlBasedComponent getComponent() {
|
||||
return (HtmlBasedComponent) component;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReadWrite() {
|
||||
return !getComponent().getListbox().isEnabled();
|
||||
return readWrite;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setReadWrite(boolean readWrite) {
|
||||
getComponent().getListbox().setEnabled(readWrite);
|
||||
if (getComponent() instanceof GridTabSelectionListView) {
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
listView.getListbox().setEnabled(readWrite);
|
||||
}
|
||||
this.readWrite = readWrite;
|
||||
}
|
||||
|
||||
private void init()
|
||||
{
|
||||
if (tableEditor)
|
||||
setVisible(false);
|
||||
{
|
||||
((Textbox)getComponent()).setReadonly(true);
|
||||
}
|
||||
else if (gridField != null && gridField.getGridTab() != null)
|
||||
{
|
||||
int AD_Tab_ID = gridField.getIncluded_Tab_ID();
|
||||
GridWindow gridWindow = gridField.getGridTab().getGridWindow();
|
||||
int count = gridWindow.getTabCount();
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
GridTab t = gridWindow.getTab(i);
|
||||
|
@ -97,7 +108,7 @@ public class WGridTabSingleSelectionEditor extends WEditor implements ContextMen
|
|||
lcn = t.getLinkColumnName();
|
||||
}
|
||||
listViewGridTab.setLinkColumnName(lcn);
|
||||
getComponent().init(listViewGridTab);
|
||||
listView.init(listViewGridTab);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -108,7 +119,7 @@ public class WGridTabSingleSelectionEditor extends WEditor implements ContextMen
|
|||
clear.addEventListener(Events.ON_CLICK, popupMenu);
|
||||
popupMenu.appendChild(clear);
|
||||
|
||||
getComponent().getListbox().setContext(popupMenu);
|
||||
listView.getListbox().setContext(popupMenu);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,7 +127,8 @@ public class WGridTabSingleSelectionEditor extends WEditor implements ContextMen
|
|||
{
|
||||
if (Events.ON_SELECT.equals(event.getName()))
|
||||
{
|
||||
int selected = getComponent().getListbox().getSelectedIndex();
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
int selected = listView.getListbox().getSelectedIndex();
|
||||
Object newValue = selected >= 0 ? Integer.toString(listViewGridTab.getKeyID(selected)) : null;
|
||||
if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
|
||||
return;
|
||||
|
@ -154,17 +166,21 @@ public class WGridTabSingleSelectionEditor extends WEditor implements ContextMen
|
|||
return;
|
||||
}
|
||||
oldValue = value;
|
||||
if (!tableEditor)
|
||||
updateSlectedIndices();
|
||||
else
|
||||
((Textbox)getComponent()).setValue(oldValue != null ? oldValue.toString() : "");
|
||||
}
|
||||
|
||||
private void updateSlectedIndices() {
|
||||
getComponent().clearSelection();
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
listView.clearSelection();
|
||||
if (!Util.isEmpty((String)oldValue))
|
||||
{
|
||||
int id = Integer.parseInt((String) oldValue);
|
||||
for(int i = 0; i < listViewGridTab.getRowCount(); i++) {
|
||||
if (listViewGridTab.getKeyID(i) == id) {
|
||||
getComponent().setSelectedIndex(i);
|
||||
listView.setSelectedIndex(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -199,14 +215,17 @@ public class WGridTabSingleSelectionEditor extends WEditor implements ContextMen
|
|||
|
||||
@Override
|
||||
public void dynamicDisplay() {
|
||||
if (!tableEditor && listViewGridTab != null) {
|
||||
String name = listViewGridTab.getLinkColumnName();
|
||||
String linkValue = Env.getContext(Env.getCtx(), gridField.getWindowNo(), name);
|
||||
if ((currentLinkValue == null && linkValue != null)
|
||||
|| (currentLinkValue != null && linkValue == null)
|
||||
|| (currentLinkValue != null && linkValue != null && !currentLinkValue.equals(linkValue)))
|
||||
{
|
||||
getComponent().refresh(listViewGridTab);
|
||||
GridTabSelectionListView listView = (GridTabSelectionListView) getComponent();
|
||||
listView.refresh(listViewGridTab);
|
||||
updateSlectedIndices();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue