diff --git a/base/src/org/compiere/model/GridField.java b/base/src/org/compiere/model/GridField.java index 17d21838ad..eab7bdd879 100644 --- a/base/src/org/compiere/model/GridField.java +++ b/base/src/org/compiere/model/GridField.java @@ -122,7 +122,7 @@ public class GridField return; log.config("(" + m_vo.ColumnName + ")"); - if (DisplayType.isLookup(m_vo.displayType)) + if (DisplayType.isLookup(m_vo.displayType) && m_vo.IsDisplayed) { if (m_vo.lookupInfo == null) { @@ -673,6 +673,7 @@ public class GridField // cannot be validated if (!isLookup() + || m_lookup == null || m_lookup.containsKey(m_value)) return true; // it's not null, a lookup and does not have the key diff --git a/base/src/org/compiere/model/GridTab.java b/base/src/org/compiere/model/GridTab.java index 2ef7c27e8b..a7337c5206 100644 --- a/base/src/org/compiere/model/GridTab.java +++ b/base/src/org/compiere/model/GridTab.java @@ -68,7 +68,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable m_mTable.setDeleteable(m_vo.IsDeleteable); // Load Tab // if (vo.TabNo == 0) - initTab(false); + //initTab(false); // else // { // m_loader = new Loader(); @@ -169,6 +169,11 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable log.config ("fini"); } // waitLoadComplete + public boolean isLoadComplete() + { + return m_loadComplete; + } + /** * Initialize Tab with record from AD_Tab_v * @param async async @@ -219,8 +224,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable m_Chats.clear(); m_Chats = null; // - m_vo.Fields.clear(); - m_vo.Fields = null; + m_vo.getFields().clear(); + //m_vo.Fields = null; m_vo = null; } // dispose @@ -234,13 +239,13 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable { log.fine("#" + m_vo.TabNo); - if (m_vo.Fields == null) + if (m_vo.getFields() == null) return false; // Add Fields - for (int f = 0; f < m_vo.Fields.size(); f++) + for (int f = 0; f < m_vo.getFields().size(); f++) { - GridFieldVO voF = (GridFieldVO)m_vo.Fields.get(f); + GridFieldVO voF = (GridFieldVO)m_vo.getFields().get(f); // Add Fields to Table if (voF != null) { @@ -359,6 +364,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable */ public GridTable getTableModel() { + if (!m_loadComplete) initTab(false); return m_mTable; } // getTableModel @@ -482,6 +488,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable */ public void query (boolean onlyCurrentRows, int onlyCurrentDays, int maxRows) { + if (!m_loadComplete) initTab(false); + log.fine("#" + m_vo.TabNo + " - Only Current Rows=" + onlyCurrentRows + ", Days=" + onlyCurrentDays + ", Detail=" + isDetail()); diff --git a/base/src/org/compiere/model/GridWindow.java b/base/src/org/compiere/model/GridWindow.java index 46f911623f..7b1e569650 100644 --- a/base/src/org/compiere/model/GridWindow.java +++ b/base/src/org/compiere/model/GridWindow.java @@ -119,55 +119,64 @@ public class GridWindow implements Serializable GridTab mTab = new GridTab(mTabVO); Env.setContext(mTabVO.ctx, mTabVO.WindowNo, mTabVO.TabNo, "KeyColumnName", mTab.getKeyColumnName()); - // Set Link Column - if (mTab.getLinkColumnName().length() == 0) - { - ArrayList parents = mTab.getParentColumnNames(); - // No Parent - no link - if (parents.size() == 0) - ; - // Standard case - else if (parents.size() == 1) - mTab.setLinkColumnName((String)parents.get(0)); - else - { - // More than one parent. - // Search prior tabs for the "right parent" - // for all previous tabs - for (int i = 0; i < m_tabs.size(); i++) - { - // we have a tab - GridTab tab = (GridTab)m_tabs.get(i); - String tabKey = tab.getKeyColumnName(); // may be "" - // look, if one of our parents is the key of that tab - for (int j = 0; j < parents.size(); j++) - { - String parent = (String)parents.get(j); - if (parent.equals(tabKey)) - { - mTab.setLinkColumnName(parent); - break; - } - // The tab could have more than one key, look into their parents - if (tabKey.equals("")) - for (int k = 0; k < tab.getParentColumnNames().size(); k++) - if (parent.equals(tab.getParentColumnNames().get(k))) - { - mTab.setLinkColumnName(parent); - break; - } - } // for all parents - } // for all previous tabs - } // parents.size > 1 - } // set Link column - mTab.setLinkColumnName(null); // overwrites, if AD_Column_ID exists - // + m_tabs.add(mTab); } } // for all tabs return true; } // loadTabData + public void initTab(int index) + { + GridTab mTab = m_tabs.get(index); + if (mTab.isLoadComplete()) return; + mTab.initTab(false); + + // Set Link Column + if (mTab.getLinkColumnName().length() == 0) + { + ArrayList parents = mTab.getParentColumnNames(); + // No Parent - no link + if (parents.size() == 0) + ; + // Standard case + else if (parents.size() == 1) + mTab.setLinkColumnName((String)parents.get(0)); + else + { + // More than one parent. + // Search prior tabs for the "right parent" + // for all previous tabs + for (int i = 0; i < m_tabs.size(); i++) + { + // we have a tab + GridTab tab = (GridTab)m_tabs.get(i); + String tabKey = tab.getKeyColumnName(); // may be "" + // look, if one of our parents is the key of that tab + for (int j = 0; j < parents.size(); j++) + { + String parent = (String)parents.get(j); + if (parent.equals(tabKey)) + { + mTab.setLinkColumnName(parent); + break; + } + // The tab could have more than one key, look into their parents + if (tabKey.equals("")) + for (int k = 0; k < tab.getParentColumnNames().size(); k++) + if (parent.equals(tab.getParentColumnNames().get(k))) + { + mTab.setLinkColumnName(parent); + break; + } + } // for all parents + } // for all previous tabs + } // parents.size > 1 + } // set Link column + mTab.setLinkColumnName(null); // overwrites, if AD_Column_ID exists + // + } + /** * Get Window Icon * @return Icon for Window @@ -369,6 +378,7 @@ public class GridWindow implements Serializable if (getHelp().length() != 0) center.addElement(new p().addElement(getHelp())); + center.addElement(new a().setName("Tabs").addElement(new h3("Tabs").addAttribute("ALIGN", "left"))); // Links to Tabs int size = getTabCount(); p p = new p(); @@ -376,7 +386,8 @@ public class GridWindow implements Serializable { GridTab tab = getTab(i); if (i > 0) - p.addElement(" - "); + p.addElement(" | "); + //p.addElement(" - "); p.addElement(new a("#Tab"+i).addElement(tab.getName())); } center.addElement(p) @@ -386,11 +397,19 @@ public class GridWindow implements Serializable for (int i = 0; i < size; i++) { table table = new table("1", "5", "5", "100%", null); + table.setBorder("1px").setCellSpacing(0); GridTab tab = getTab(i); + table tabHeader = new table(); + tabHeader.setBorder("0").setCellPadding(0).setCellSpacing(0); + tabHeader.addElement(new tr() + .addElement(new td().addElement(new a().setName("Tab" + i) + .addElement(new h2(Msg.getMsg(Env.getCtx(), "Tab") + ": " + tab.getName())))) + .addElement(new td().addElement(WebDoc.NBSP).addElement(WebDoc.NBSP)) + .addElement(new a("#Tabs").addElement("..").addAttribute("title", "Up one level"))); tr tr = new tr() .addElement(new th() - .addElement(new a().setName("Tab" + i) - .addElement(new h2(Msg.getMsg(Env.getCtx(), "Tab") + ": " + tab.getName())))); + .addElement(tabHeader)); + if (tab.getDescription().length() != 0) tr.addElement(new th() .addElement(new i(tab.getDescription()))); @@ -404,6 +423,9 @@ public class GridWindow implements Serializable td.addElement(new p().addElement(tab.getHelp())); // Links to Fields p = new p(); + p.addElement(new a().setName("Fields"+i).addElement(new h4("Fields").addAttribute("ALIGN", "left"))); + if (!tab.isLoadComplete()) + this.initTab(i); for (int j = 0; j < tab.getFieldCount(); j++) { GridField field = tab.getField(j); @@ -411,7 +433,8 @@ public class GridWindow implements Serializable if (hdr != null && hdr.length() > 0) { if (j > 0) - p.addElement(" - "); + p.addElement(" | "); + //p.addElement(" - "); p.addElement(new a("#Field" + i + j, hdr)); } } @@ -425,10 +448,16 @@ public class GridWindow implements Serializable String hdr = field.getHeader(); if (hdr != null && hdr.length() > 0) { - td = new td().setColSpan(2) - .addElement(new a().setName("Field" + i + j) - .addElement(new h3(Msg.getMsg(Env.getCtx(), "Field") + ": " + hdr)) - ); + table fieldHeader = new table(); + fieldHeader.setBorder("0").setCellPadding(0).setCellSpacing(0); + fieldHeader.addElement(new tr() + .addElement(new td().addElement(new a().setName("Field" + i + j) + .addElement(new h3(Msg.getMsg(Env.getCtx(), "Field") + ": " + hdr))) + .addElement(new td().addElement(WebDoc.NBSP).addElement(WebDoc.NBSP)) + .addElement(new strong().addElement(new a("#Fields"+i).addElement("..").addAttribute("title", "Up one level"))))); + + td = new td().setColSpan(2).addElement(fieldHeader); + if (field.getDescription().length() != 0) td.addElement(new i(field.getDescription())); //