Fixed zk report viewer not cleanup when tab is closed.

(transplanted from 8336c90d4bc263843f7b10a6bb22738918423659)
This commit is contained in:
Heng Sin Low 2011-06-22 00:48:20 +08:00
parent b85f11d738
commit c02b06e328
1 changed files with 52 additions and 6 deletions

View File

@ -22,6 +22,7 @@ import java.io.StringWriter;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
@ -34,9 +35,13 @@ import org.adempiere.webui.component.ConfirmPanel;
import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Label;
import org.adempiere.webui.component.ListItem; import org.adempiere.webui.component.ListItem;
import org.adempiere.webui.component.Listbox; import org.adempiere.webui.component.Listbox;
import org.adempiere.webui.component.Tabbox;
import org.adempiere.webui.component.Tabpanel;
import org.adempiere.webui.component.Tabs;
import org.adempiere.webui.component.Window; import org.adempiere.webui.component.Window;
import org.adempiere.webui.event.DrillEvent; import org.adempiere.webui.event.DrillEvent;
import org.adempiere.webui.event.ZoomEvent; import org.adempiere.webui.event.ZoomEvent;
import org.adempiere.webui.panel.ITabOnCloseHandler;
import org.adempiere.webui.panel.StatusBarPanel; import org.adempiere.webui.panel.StatusBarPanel;
import org.adempiere.webui.report.HTMLExtension; import org.adempiere.webui.report.HTMLExtension;
import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.session.SessionManager;
@ -72,6 +77,7 @@ import org.zkoss.zul.Iframe;
import org.zkoss.zul.Listitem; import org.zkoss.zul.Listitem;
import org.zkoss.zul.Menuitem; import org.zkoss.zul.Menuitem;
import org.zkoss.zul.Separator; import org.zkoss.zul.Separator;
import org.zkoss.zul.Tab;
import org.zkoss.zul.Toolbar; import org.zkoss.zul.Toolbar;
import org.zkoss.zul.Toolbarbutton; import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Vbox; import org.zkoss.zul.Vbox;
@ -94,11 +100,11 @@ import org.zkoss.zul.Vbox;
* *
* @author Low Heng Sin * @author Low Heng Sin
*/ */
public class ZkReportViewer extends Window implements EventListener { public class ZkReportViewer extends Window implements EventListener, ITabOnCloseHandler {
private static final long serialVersionUID = 4640088641140012438L; private static final long serialVersionUID = 4640088641140012438L;
/** Window No */ /** Window No */
private int m_WindowNo; private int m_WindowNo = -1;
/** Print Context */ /** Print Context */
private Properties m_ctx; private Properties m_ctx;
/** Setting Values */ /** Setting Values */
@ -515,12 +521,52 @@ public class ZkReportViewer extends Window implements EventListener {
*/ */
public void onClose() public void onClose()
{ {
SessionManager.getAppDesktop().unregisterWindow(m_WindowNo); cleanUp();
m_reportEngine = null;
m_ctx = null;
super.onClose(); super.onClose();
} // dispose } // dispose
@Override
public void onClose(Tabpanel tabPanel) {
Tab tab = tabPanel.getLinkedTab();
Tabbox tabbox = (Tabbox) tab.getTabbox();
if (tabbox.getSelectedTab() == tab) {
Tabs tabs = (Tabs) tabbox.getTabs();
List<?> childs = tabs.getChildren();
for(int i = 0; i < childs.size(); i++) {
if (childs.get(i) == tab) {
if (i > 0)
tabbox.setSelectedIndex((i-1));
break;
}
}
}
tabPanel.detach();
tab.detach();
cleanUp();
}
@Override
public void setParent(Component parent) {
super.setParent(parent);
if (parent != null) {
if (parent instanceof Tabpanel) {
Tabpanel tabPanel = (Tabpanel) parent;
tabPanel.setOnCloseHandler(this);
}
}
}
private void cleanUp() {
if (m_reportEngine != null || m_WindowNo >= 0)
{
SessionManager.getAppDesktop().unregisterWindow(m_WindowNo);
m_reportEngine = null;
m_ctx = null;
m_WindowNo = -1;
}
}
public void onEvent(Event event) throws Exception { public void onEvent(Event event) throws Exception {
if(event.getTarget().getId().equals(ConfirmPanel.A_CANCEL)) if(event.getTarget().getId().equals(ConfirmPanel.A_CANCEL))
@ -949,5 +995,5 @@ public class ZkReportViewer extends Window implements EventListener {
int AD_Window_ID = 240; // hardcoded int AD_Window_ID = 240; // hardcoded
int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().get_ID(); int AD_PrintFormat_ID = m_reportEngine.getPrintFormat().get_ID();
AEnv.zoom(AD_Window_ID, MQuery.getEqualQuery("AD_PrintFormat_ID", AD_PrintFormat_ID)); AEnv.zoom(AD_Window_ID, MQuery.getEqualQuery("AD_PrintFormat_ID", AD_PrintFormat_ID));
} // cmd_customize } // cmd_customize
} }