From e18d8001d439ab78a40c427398c3210037e75afd Mon Sep 17 00:00:00 2001 From: igorpojzl <59439434+igorpojzl@users.noreply.github.com> Date: Mon, 7 Sep 2020 13:49:10 +0200 Subject: [PATCH] IDEMPIERE-4442 Change Locator Dialog TableDirect (#242) * IDEMPIERE-4442 Change Locator Dialog TableDirect * IDEMPEIRE-4442 Fixed inconsitent Locator --- .../webui/editor/WTableDirEditor.java | 12 +++- .../webui/window/WLocatorDialog.java | 65 ++++++------------- 2 files changed, 32 insertions(+), 45 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java index f0637cf9d8..e1c6c023ba 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java @@ -44,6 +44,7 @@ import org.compiere.model.Lookup; import org.compiere.model.MBPartnerLocation; import org.compiere.model.MColumn; import org.compiere.model.MLocation; +import org.compiere.model.MLocator; import org.compiere.model.MLookup; import org.compiere.model.MRole; import org.compiere.model.MTable; @@ -372,7 +373,7 @@ ContextMenuListener, IZoomableEditor getComponent().setSelectedItem(null); oldValue = value; - if (getComponent() instanceof EditorAutoComplete) + if (getComponent() instanceof EditorAutoComplete && gridField!=null) // IDEMPIERE-4442 Fix NPE, for Autocomplete in non Grid Usage. updateStyle(); } } @@ -427,6 +428,15 @@ ContextMenuListener, IZoomableEditor found = true; } } + else if (obj instanceof MLocator) + { + MLocator lookupKNPair = (MLocator) obj; + getComponent().appendItem(lookupKNPair.getValue(), lookupKNPair.getM_Locator_ID()); + if (!found && oldValue != null && lookupKNPair.getM_Locator_ID() == (Integer) oldValue) + { + found = true; + } + } } if (!found && oldValue != null) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WLocatorDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WLocatorDialog.java index 7db54741f0..6bd254dc4b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WLocatorDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WLocatorDialog.java @@ -41,6 +41,7 @@ import org.adempiere.webui.component.Row; import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.Window; +import org.adempiere.webui.editor.WTableDirEditor; import org.adempiere.webui.theme.ThemeManager; import org.adempiere.webui.util.ZKUpdateUtil; import org.compiere.model.MLocator; @@ -77,7 +78,7 @@ public class WLocatorDialog extends Window implements EventListener private Grid mainPanel = GridFactory.newGridLayout(); - private Listbox lstLocator = new Listbox(); + private WTableDirEditor locatorField = null; private Listbox lstWarehouse = new Listbox(); private Listbox lstLocatorType = new Listbox(); @@ -144,9 +145,9 @@ public class WLocatorDialog extends Window implements EventListener m_WindowNo = windowNo; this.title = title; + m_mLocator = mLocator; initComponents(); - m_mLocator = mLocator; m_M_Locator_ID = M_Locator_ID; m_mandatory = mandatory; m_only_Warehouse_ID = only_Warehouse_ID; @@ -167,10 +168,8 @@ public class WLocatorDialog extends Window implements EventListener lblLevelZ.setValue(Msg.getElement(Env.getCtx(), "Z")); lblKey.setValue(Msg.translate(Env.getCtx(), "Value")); - lstLocator.setMold("select"); - lstLocator.setRows(0); - LayoutUtils.addSclass("z-label", lstLocator); - + locatorField = new WTableDirEditor(m_mLocator , Msg.translate(Env.getCtx(), "M_Locator_ID"), "", true, false, true, true); + LayoutUtils.addSclass("z-label", locatorField.getComponent()); chkCreateNew.setLabel(Msg.getMsg(Env.getCtx(), "CreateNew")); lstWarehouse.setMold("select"); @@ -200,8 +199,8 @@ public class WLocatorDialog extends Window implements EventListener Row row = new Row(); rows.appendChild(row); row.appendChild(lblLocator); - row.appendChild(lstLocator); - ZKUpdateUtil.setHflex(lstLocator, "1"); + row.appendChild(locatorField.getComponent()); + ZKUpdateUtil.setHflex(locatorField.getComponent(), "1"); row = new Row(); rows.appendChild(row); @@ -393,23 +392,10 @@ public class WLocatorDialog extends Window implements EventListener } } - int selectedIndex = -1; - for (int i = 0; i < m_mLocator.getSize(); i++) - { - MLocator obj = (MLocator) m_mLocator.getElementAt(i); - if (obj.getM_Locator_ID() == m_M_Locator_ID && m_M_Locator_ID > 0) - selectedIndex = i; - - lstLocator.appendItem(obj.toString(), obj); - } - - if (lstLocator.getItemCount() > 0) { - if (selectedIndex >= 0) - lstLocator.setSelectedIndex(selectedIndex); - else - lstLocator.setSelectedIndex(0); - } - lstLocator.addEventListener(Events.ON_SELECT, this); + if(m_M_Locator_ID > 0) + locatorField.setValue(m_M_Locator_ID); + + locatorField.getComponent().addEventListener(Events.ON_SELECT, this); displayLocator(); @@ -432,10 +418,10 @@ public class WLocatorDialog extends Window implements EventListener private void displayLocator() { MLocator l = null; - ListItem listitem = lstLocator.getSelectedItem(); - - if (listitem != null) - l = (MLocator) listitem.getValue(); + Integer M_Locator_ID = (Integer)locatorField.getValue(); + + if (M_Locator_ID != null) + l = MLocator.get(Env.getCtx(), M_Locator_ID); if (l == null) return; @@ -646,8 +632,8 @@ public class WLocatorDialog extends Window implements EventListener listitem = new ListItem(); listitem.setValue(loc); - lstLocator.appendItem(loc.get_TableName(), loc); - lstLocator.setSelectedIndex(lstLocator.getItemCount() - 1); + locatorField.actionRefresh(); + locatorField.setValue(m_M_Locator_ID); } // createNew if (log.isLoggable(Level.CONFIG)) log.config("M_Locator_ID=" + m_M_Locator_ID); @@ -660,13 +646,7 @@ public class WLocatorDialog extends Window implements EventListener public Integer getValue() { - ListItem listitem = lstLocator.getSelectedItem(); - MLocator l = (MLocator) listitem.getValue(); - - if (l != null && l.getM_Locator_ID() != 0) - return Integer.valueOf(l.getM_Locator_ID()); - - return null; + return (Integer) locatorField.getValue(); } // getValue /** @@ -678,11 +658,8 @@ public class WLocatorDialog extends Window implements EventListener { if (m_change) { - ListItem listitem = lstLocator.getSelectedItem(); - MLocator l = listitem != null ? (MLocator)listitem.getValue() : null; - - if (l != null) - return l.getM_Locator_ID() == m_M_Locator_ID; + Integer locator_id = (Integer) locatorField.getValue(); + return locator_id == m_M_Locator_ID; } return m_change; } // getChange @@ -704,7 +681,7 @@ public class WLocatorDialog extends Window implements EventListener m_change = true; this.detach(); } - else if (event.getTarget() == lstLocator) + else if (event.getTarget() == locatorField.getComponent()) displayLocator(); else if (event.getTarget() == chkCreateNew) enableNew();