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