diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/AbstractADTab.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/AbstractADTab.java index 31e9727607..522e606662 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/AbstractADTab.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/AbstractADTab.java @@ -122,7 +122,7 @@ public abstract class AbstractADTab extends AbstractUIPart implements IADTab if (newIndex != oldIndex) { - canJump = canNavigateTo(oldIndex, newIndex); + canJump = canNavigateTo(oldIndex, newIndex, true); if (canJump) { prepareContext(newIndex, newTab); @@ -204,8 +204,12 @@ public abstract class AbstractADTab extends AbstractUIPart implements IADTab } return true; } - + public boolean canNavigateTo(int fromIndex, int toIndex) { + return canNavigateTo(fromIndex, toIndex, false); + } + + public boolean canNavigateTo(int fromIndex, int toIndex, boolean checkRecordID) { IADTabpanel newTab = tabPanelList.get(toIndex); if (newTab instanceof ADTabpanel) { @@ -222,8 +226,7 @@ public abstract class AbstractADTab extends AbstractUIPart implements IADTab IADTabpanel oldTabpanel = fromIndex >= 0 ? tabPanelList.get(fromIndex) : null; if (oldTabpanel != null) { - IADTabpanel oldTab = oldTabpanel; - if (newTab.getTabLevel() > oldTab.getTabLevel()) + if (newTab.getTabLevel() > oldTabpanel.getTabLevel()) { int currentLevel = newTab.getTabLevel(); for (int i = toIndex - 1; i >= 0; i--) @@ -239,8 +242,10 @@ public abstract class AbstractADTab extends AbstractUIPart implements IADTab currentLevel = tabPanel.getTabLevel(); } } + if (canJump && checkRecordID && oldTabpanel.getRecord_ID() <= 0) + canJump = false; } - } + } } return canJump; } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ADSortTab.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ADSortTab.java index 3173bcdbd7..433341c326 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ADSortTab.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ADSortTab.java @@ -68,9 +68,10 @@ import org.zkoss.zul.event.ListDataEvent; */ public class ADSortTab extends Panel implements IADTabpanel { - - private static final long serialVersionUID = 4289328613547509587L; - private int m_AD_ColumnSortOrder_ID; + /** + * + */ + private static final long serialVersionUID = 4461514427222034848L; /** * Sort Tab Constructor @@ -869,6 +870,10 @@ public class ADSortTab extends Panel implements IADTabpanel return gridTab.getTabLevel(); } + public int getRecord_ID() { + return gridTab.getRecord_ID(); + } + public String getTitle() { return gridTab.getName(); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ADTabpanel.java index 0bb4fe591a..c982cee1c6 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ADTabpanel.java @@ -98,7 +98,7 @@ DataStatusListener, IADTabpanel /** * */ - private static final long serialVersionUID = -975129028953555569L; + private static final long serialVersionUID = -6082680802978974909L; private static final String ON_DEFER_SET_SELECTED_NODE = "onDeferSetSelectedNode"; @@ -670,6 +670,14 @@ DataStatusListener, IADTabpanel return gridTab.getTabLevel(); } + /** + * @return The record ID of this Tabpanel + */ + public int getRecord_ID() + { + return gridTab.getRecord_ID(); + } + /** * Is panel need refresh * @return boolean diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractADWindowPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractADWindowPanel.java index 7175aff183..577873f164 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractADWindowPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractADWindowPanel.java @@ -1025,6 +1025,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To FDialog.warn(curWindowNo, "TabSwitchJumpGo", title); if (callback != null) callback.onCallback(false); + return; } IADTabpanel oldTabpanel = curTabpanel; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/IADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/IADTabpanel.java index 655b0b8c8c..76509b9bb4 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/IADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/IADTabpanel.java @@ -33,6 +33,11 @@ public interface IADTabpanel extends Component, Evaluatee { */ public int getTabLevel(); + /** + * @return record ID + */ + public int getRecord_ID(); + /** * @return true if refresh is not needed */