diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index 37a635a2b9..c73227f84d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -601,9 +601,19 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer //create tree if (gridTab.isTreeTab() && treePanel != null) { - int AD_Tree_ID = MTree.getDefaultAD_Tree_ID ( - Env.getAD_Client_ID(Env.getCtx()), gridTab.getKeyColumnName()); - treePanel.initTree(AD_Tree_ID, windowNo); + int AD_Tree_ID = Env.getContextAsInt (Env.getCtx(), getWindowNo(), "AD_Tree_ID", true); + int AD_Tree_ID_Default = MTree.getDefaultAD_Tree_ID (Env.getAD_Client_ID(Env.getCtx()), gridTab.getKeyColumnName()); + if (gridTab.getRecord_ID() >= 0) { + if (AD_Tree_ID != 0) { + treePanel.initTree(AD_Tree_ID, windowNo); + setSelectedNode(gridTab.getRecord_ID()); + } else if (AD_Tree_ID_Default != 0) { + treePanel.initTree(AD_Tree_ID_Default, windowNo); + setSelectedNode(gridTab.getRecord_ID()); + } + } else { + treePanel.getTree().clear(); + } } if (!gridTab.isSingleRow() && !isGridView()) @@ -1155,19 +1165,65 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer createUI(); dynamicDisplay(col); - //sync tree - if (treePanel != null) { + //sync tree + if (treePanel != null) + { if ("Deleted".equalsIgnoreCase(e.getAD_Message())) - if (e.Record_ID != null - && e.Record_ID instanceof Integer - && ((Integer)e.Record_ID != gridTab.getRecord_ID())) + { + if (e.Record_ID != null && e.Record_ID instanceof Integer && ((Integer)e.Record_ID != gridTab.getRecord_ID())) deleteNode((Integer)e.Record_ID); else setSelectedNode(gridTab.getRecord_ID()); - else - setSelectedNode(gridTab.getRecord_ID()); + } + else if (!e.isInserting()) + { + boolean refresh=true; + Treeitem item = treePanel.getTree().getSelectedItem(); + if (item != null) + { + @SuppressWarnings("unchecked") + MTreeNode treeNode = ((DefaultTreeNode) item.getValue()).getData(); + if (treeNode.getNode_ID() == gridTab.getRecord_ID()){ + setSelectedNode(gridTab.getRecord_ID()); + refresh = false; + } + } + + if (refresh) + { + int AD_Tree_ID = Env.getContextAsInt (Env.getCtx(), getWindowNo(), "AD_Tree_ID", true); + if (gridTab.getRecord_ID()>=0) + { + if (AD_Tree_ID != 0) + { + treePanel.initTree(AD_Tree_ID, windowNo); + setSelectedNode(gridTab.getRecord_ID()); + } + else + { + AD_Tree_ID = MTree.getDefaultAD_Tree_ID (Env.getAD_Client_ID(Env.getCtx()), gridTab.getKeyColumnName()); + treePanel.initTree(AD_Tree_ID, windowNo); + } + } + else + { + treePanel.getTree().clear(); + } + } + + }else if(e.isInserting() && gridTab.getRecord_ID() < 0 && gridTab.getTabLevel() > 0 ) + { + int AD_Tree_ID = Integer.parseInt(gridTab.getParentTab().getValue("AD_Tree_ID").toString()); + MTreeNode root = new MTree (Env.getCtx(), AD_Tree_ID, true, true, null).getRoot(); + SimpleTreeModel treeModel = SimpleTreeModel.createFrom(root); + try { + treePanel.getTree().setItemRenderer(treeModel); + treePanel.getTree().setModel(treeModel); + } catch (Exception treeExc) { + logger.log(Level.SEVERE, "Failed to setup tree"); + } + } } - if (listPanel.isVisible()) { listPanel.updateListIndex(); listPanel.dynamicDisplay(col); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/SimpleTreeModel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/SimpleTreeModel.java index 134ed8ef82..fcf0857c53 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/SimpleTreeModel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/SimpleTreeModel.java @@ -81,11 +81,16 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel impl SimpleTreeModel treeModel = SimpleTreeModel.createFrom(root); treeModel.setItemDraggable(true); treeModel.addOnDropEventListener(new ADTreeOnDropListener(tree, treeModel, vTree, windowNo)); - - Treecols treeCols = new Treecols(); - tree.appendChild(treeCols); - Treecol treeCol = new Treecol(); - treeCols.appendChild(treeCol); + + if (tree.getTreecols() == null) + { + Treecols treeCols = new Treecols(); + tree.getTreecols(); + tree.appendChild(treeCols); + Treecol treeCol = new Treecol(); + treeCols.appendChild(treeCol); + } + tree.setPageSize(-1); try { tree.setItemRenderer(treeModel);