From ac5c4fdde8cd9d8e60fccaa74f4e6c68b8f275de Mon Sep 17 00:00:00 2001 From: hieplq Date: Tue, 29 Oct 2013 16:46:36 +0700 Subject: [PATCH] IDEMPIERE-1478 Usability improvement - closing without saving --- .../webui/adwindow/ADWindowContent.java | 39 +++++++++++++++++-- .../adwindow/AbstractADWindowContent.java | 24 ++++++++++-- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowContent.java index bc917077f6..75402e61b4 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowContent.java @@ -25,6 +25,7 @@ package org.adempiere.webui.adwindow; import java.util.Properties; +import org.adempiere.util.Callback; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.component.Tabpanel; import org.adempiere.webui.component.ToolBarButton; @@ -197,15 +198,45 @@ public class ADWindowContent extends AbstractADWindowContent class TabOnCloseHanlder implements ITabOnCloseHandler { public void onClose(Tabpanel tabPanel) { + if (ADWindowContent.this.getOnExitCallBack() == null){ + OnCloseCallback onCloseCallback = new OnCloseCallback(); + ADWindowContent.this.setOnExitCallBack(onCloseCallback); + onCloseCallback.setTabPanel(tabPanel); + } if (ADWindowContent.this.onExit()) { - Tab tab = tabPanel.getLinkedTab(); - tab.close(); - if (getWindowNo() > 0) - SessionManager.getAppDesktop().unregisterWindow(getWindowNo()); + closeTab (tabPanel); } } } + class OnCloseCallback implements Callback{ + Tabpanel tabPanel; + public Tabpanel getTabPanel() { + return tabPanel; + } + public void setTabPanel(Tabpanel tabPanel) { + this.tabPanel = tabPanel; + } + @Override + public void onCallback(Boolean result) { + if (result){ + closeTab (tabPanel); + } + + } + } + + /** + * close tab contain this window + * @param tabPanel + */ + protected void closeTab (Tabpanel tabPanel) { + Tab tab = tabPanel.getLinkedTab(); + tab.close(); + if (getWindowNo() > 0) + SessionManager.getAppDesktop().unregisterWindow(getWindowNo()); + } + public static class ADWindowVlayout extends Vlayout implements IHelpContext { /** * generated serial id diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index abb96c9176..b3bcd97916 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -971,6 +971,20 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements } /** + * handle respond of user with close un save message. + * must set before call onExit + */ + private Callback onExitCallBack; + + public Callback getOnExitCallBack() { + return onExitCallBack; + } + + public void setOnExitCallBack(Callback onExitCallBack) { + this.onExitCallBack = onExitCallBack; + } + + /** * @return boolean */ public boolean onExit() @@ -979,10 +993,12 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements { return true; } - else - FDialog.info(this.curWindowNo, null, "SaveBeforeClose"); - - return false; + else{ + + FDialog.ask(curWindowNo, null, "CloseUnSave?", getOnExitCallBack()); + return false; + } + } /**