diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java index 294565c63c..90d001434a 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java @@ -58,8 +58,16 @@ import org.zkoss.zul.Html; * @author arboleda - globalqss * - Implement ShowHelp option on processes and reports */ -public class ProcessModalDialog extends Window implements EventListener, IProcessMonitor +public class ProcessModalDialog extends Window implements EventListener, IProcessMonitor { + private static final String ON_STATUS_UPDATE = "onStatusUpdate"; + private static final String ON_COMPLETE = "onComplete"; + + /** + * on modal close event, use this for highlight mode modal dialog to perform action after the modal dialog closed. + */ + public final static String ON_MODAL_CLOSE = "onModalClose"; + /** * generated serial version ID */ @@ -140,7 +148,7 @@ public class ProcessModalDialog extends Window implements EventListener, IProces centerPanel = new Panel(); dialogBody.appendChild(centerPanel); div = new Div(); - div.setAlign("right"); + div.setStyle("text-align: right"); Hbox hbox = new Hbox(); Button btn = new Button("Ok"); LayoutUtils.addSclass("action-text-button", btn); @@ -167,6 +175,7 @@ public class ProcessModalDialog extends Window implements EventListener, IProces private StringBuffer m_messageText = new StringBuffer(); private String m_ShowHelp = null; // Determine if a Help Process Window is shown private boolean m_valid = true; + private boolean m_cancel = false; private Panel centerPanel = null; private Html message = null; @@ -181,7 +190,6 @@ public class ProcessModalDialog extends Window implements EventListener, IProces private boolean isLocked = false; private org.adempiere.webui.apps.ProcessModalDialog.ProcessDialogRunnable processDialogRunnable; private Thread thread; - private String statusUpdate; /** * Set Visible @@ -212,6 +220,14 @@ public class ProcessModalDialog extends Window implements EventListener, IProces return m_valid; } + /** + * @return true if user have press the cancel button to close the dialog + */ + public boolean isCancel() + { + return m_cancel; + } + /** * Dynamic Init * @return true, if there is something to process (start from menu) @@ -351,37 +367,8 @@ public class ProcessModalDialog extends Window implements EventListener, IProces processDialogRunnable = new ProcessDialogRunnable(p); thread = new Thread(processDialogRunnable); thread.start(); - - Clients.response(new AuEcho(this, "checkProgress", null)); } - public void checkProgress() { - try { - Thread.sleep(500); - } catch (InterruptedException e) { - Thread.interrupted(); - } - if (thread.isAlive()) { - synchronized(this) { - if (statusUpdate != null) { - if (progressWindow != null) - progressWindow.statusUpdate(statusUpdate); - statusUpdate = null; - } - } - Clients.response(new AuEcho(this, "checkProgress", null)); - } else { - Env.getCtx().putAll(processDialogRunnable.getProperties()); - thread = null; - processDialogRunnable = null; - dispose(); - if (m_processMonitor != null) { - m_processMonitor.unlockUI(m_pi); - } - unlockUI(m_pi); - } - } - private void hideBusyDialog() { if (progressWindow != null) { progressWindow.dispose(); @@ -392,18 +379,50 @@ public class ProcessModalDialog extends Window implements EventListener, IProces /** * handle events */ - public void onEvent(Event event) { + public void onEvent(Event event) { Component component = event.getTarget(); if (component instanceof Button) { Button element = (Button)component; if ("Ok".equalsIgnoreCase(element.getId())) { - this.startProcess(); + onOK(); } else if ("Cancel".equalsIgnoreCase(element.getId())) { - this.dispose(); + onCancel(); } + } else if (event.getName().equals(ON_STATUS_UPDATE)) { + onStatusUpdate(event); + } else if (event.getName().equals(ON_COMPLETE)) { + onComplete(); } } + private void onOK() { + this.startProcess(); + } + + private void onCancel() { + m_cancel = true; + this.dispose(); + Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); + } + + private void onStatusUpdate(Event event) { + String message = (String) event.getData(); + if (progressWindow != null) + progressWindow.statusUpdate(message); + } + + private void onComplete() { + Env.getCtx().putAll(processDialogRunnable.getProperties()); + thread = null; + processDialogRunnable = null; + dispose(); + if (m_processMonitor != null) { + m_processMonitor.unlockUI(m_pi); + } + unlockUI(m_pi); + Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); + } + @Override public void lockUI(ProcessInfo pi) { if (isLocked || Executions.getCurrent() == null) @@ -429,10 +448,18 @@ public class ProcessModalDialog extends Window implements EventListener, IProces @Override public void statusUpdate(String message) { - statusUpdate = message; + Executions.schedule(getDesktop(), this, new Event(ON_STATUS_UPDATE, this, message)); } - class ProcessDialogRunnable implements Runnable { + /** + * + * @return ProcessInfo + */ + public ProcessInfo getProcessInfo() { + return m_pi; + } + + class ProcessDialogRunnable implements Runnable { private Properties properties; ProcessDialogRunnable(Properties properties) { @@ -446,6 +473,7 @@ public class ProcessModalDialog extends Window implements EventListener, IProces WProcessCtl.process(ProcessModalDialog.this, m_WindowNo, parameterPanel, m_pi, null); } finally { ServerContext.dispose(); + Executions.schedule(getDesktop(), ProcessModalDialog.this, new Event(ON_COMPLETE, ProcessModalDialog.this, null)); } } 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 bfe193c080..cd7d59679f 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 @@ -118,7 +118,7 @@ import org.zkoss.zul.Menupopup; * https://sourceforge.net/tracker/?func=detail&aid=2985892&group_id=176962&atid=955896 */ public abstract class AbstractADWindowPanel extends AbstractUIPart implements ToolbarListener, - EventListener, DataStatusListener, ActionListener, IProcessMonitor + EventListener, DataStatusListener, ActionListener, IProcessMonitor { private static final CLogger logger; @@ -777,7 +777,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To m_lock = new Menuitem(Msg.translate(Env.getCtx(), "Lock")); m_popup.appendChild(m_lock); - m_lock.addEventListener(Events.ON_CLICK, new EventListener() + m_lock.addEventListener(Events.ON_CLICK, new EventListener() { public void onEvent(Event event) throws Exception { @@ -790,7 +790,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To m_access = new Menuitem(Msg.translate(Env.getCtx(), "RecordAccessDialog")); m_popup.appendChild(m_access); - m_access.addEventListener(Events.ON_CLICK, new EventListener() + m_access.addEventListener(Events.ON_CLICK, new EventListener() { public void onEvent(Event event) throws Exception { @@ -1760,7 +1760,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To messagePanel.appendChild(listbox); Div div = new Div(); - div.setAlign("center"); + div.setStyle("text-align: center"); messagePanel.appendChild(div); Hbox hbox = new Hbox(); @@ -1769,9 +1769,8 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To Button btnOk = new Button(); btnOk.setLabel(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "OK"))); btnOk.setImage("/images/Ok16.png"); - btnOk.addEventListener(Events.ON_CLICK, new EventListener() + btnOk.addEventListener(Events.ON_CLICK, new EventListener() { - @SuppressWarnings("unchecked") public void onEvent(Event event) throws Exception { if (FDialog.ask(curWindowNo, messagePanel, "DeleteSelection")) @@ -1812,7 +1811,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To Button btnCancel = new Button(); btnCancel.setLabel(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "Cancel"))); btnCancel.setImage("/images/Cancel16.png"); - btnCancel.addEventListener(Events.ON_CLICK, new EventListener() + btnCancel.addEventListener(Events.ON_CLICK, new EventListener() { public void onEvent(Event event) throws Exception { @@ -2247,9 +2246,19 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To dialog.setWidth("500px"); dialog.setVisible(true); dialog.setPosition("center"); + dialog.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); + dialog.addEventListener(ProcessModalDialog.ON_MODAL_CLOSE, new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + onRefresh(false); + } + }); AEnv.showWindow(dialog); } - onRefresh(false); + else + { + onRefresh(false); + } } } // actionButton