diff --git a/org.adempiere.base/src/org/adempiere/util/IProcessUI.java b/org.adempiere.base/src/org/adempiere/util/IProcessUI.java index be37203357..7d8e64cec4 100644 --- a/org.adempiere.base/src/org/adempiere/util/IProcessUI.java +++ b/org.adempiere.base/src/org/adempiere/util/IProcessUI.java @@ -76,7 +76,7 @@ public interface IProcessUI { * @param message * @param callback */ - public void ask(String message, Callback callback); + public void ask(String message, Callback callback); /** * add to list of file available for download after process end diff --git a/org.adempiere.base/src/org/adempiere/util/ProcessUtil.java b/org.adempiere.base/src/org/adempiere/util/ProcessUtil.java index af9a200138..df25e38c2b 100644 --- a/org.adempiere.base/src/org/adempiere/util/ProcessUtil.java +++ b/org.adempiere.base/src/org/adempiere/util/ProcessUtil.java @@ -346,12 +346,7 @@ public final class ProcessUtil { public static MWFProcess startWorkFlow(Properties ctx, ProcessInfo pi, int AD_Workflow_ID) { MWorkflow wf = MWorkflow.get (ctx, AD_Workflow_ID); - MWFProcess wfProcess = null; - if (pi.isBatch()) - wfProcess = wf.start(pi, pi.getTransactionName()); // may return null - else { - wfProcess = wf.startWait(pi); // may return null - } + MWFProcess wfProcess = wf.start(pi, pi.getTransactionName()); log.fine(pi.toString()); return wfProcess; } diff --git a/org.adempiere.base/src/org/compiere/wf/MWorkflow.java b/org.adempiere.base/src/org/compiere/wf/MWorkflow.java index 608769384d..34f7cba324 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWorkflow.java +++ b/org.adempiere.base/src/org/compiere/wf/MWorkflow.java @@ -693,7 +693,7 @@ public class MWorkflow extends X_AD_Workflow retValue = new MWFProcess (this, pi, trxName != null ? trxName : localTrx.getTrxName()); retValue.saveEx(); pi.setSummary(Msg.getMsg(getCtx(), "Processing")); - retValue.startWork(); + retValue.startWork(); if (localTrx != null) localTrx.commit(true); } @@ -710,6 +710,16 @@ public class MWorkflow extends X_AD_Workflow if (localTrx != null) localTrx.close(); } + + if (retValue != null) + { + String summary = retValue.getProcessMsg(); + StateEngine state = retValue.getState(); + if (summary == null || summary.trim().length() == 0) + summary = state.toString(); + pi.setSummary(summary, state.isTerminated() || state.isAborted()); + } + return retValue; } // MWFProcess diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java b/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java index ebdb54dccb..15dde179a1 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java @@ -2972,10 +2972,10 @@ public final class APanel extends CPanel } // updateToolBarAndMenuWithRestriction @Override - public void ask(String message, Callback callback) { + public void ask(String message, Callback callback) { boolean b = ADialog.ask(m_curWindowNo, this, message); if (callback != null) { - callback.onCallback(b ? "OK" : "CANCEL"); + callback.onCallback(b); } } diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java index 8795f207aa..b61db3d085 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java @@ -526,10 +526,10 @@ public class ProcessDialog extends CFrame } @Override - public void ask(String message, Callback callback) { + public void ask(String message, Callback callback) { boolean b = ADialog.ask(m_WindowNo, this, message); if (callback != null) { - callback.onCallback(b ? "OK" : "CANCEL"); + callback.onCallback(b); } } diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/form/VGenPanel.java b/org.adempiere.ui.swing/src/org/compiere/apps/form/VGenPanel.java index 5ec585ad0f..da349831b5 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/form/VGenPanel.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/form/VGenPanel.java @@ -389,10 +389,10 @@ public class VGenPanel extends CPanel implements ActionListener, ChangeListener, } @Override - public void ask(String message, Callback callback) { + public void ask(String message, Callback callback) { boolean b = ADialog.ask(m_WindowNo, this, message); if (callback != null) { - callback.onCallback(b ? "OK" : "CANCEL"); + callback.onCallback(b); } } diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/form/VPaySelect.java b/org.adempiere.ui.swing/src/org/compiere/apps/form/VPaySelect.java index 9777d3039a..bddd2fd6ec 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/form/VPaySelect.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/form/VPaySelect.java @@ -448,10 +448,10 @@ public class VPaySelect extends PaySelect implements FormPanel, ActionListener, } @Override - public void ask(String message, Callback callback) { + public void ask(String message, Callback callback) { boolean b = ADialog.ask(m_WindowNo, null, message); if (callback != null) { - callback.onCallback(b ? "OK" : "CANCEL"); + callback.onCallback(b); } } diff --git a/org.adempiere.ui.swing/src/org/eevolution/form/VInOutInvoiceGen.java b/org.adempiere.ui.swing/src/org/eevolution/form/VInOutInvoiceGen.java index f2321eb2d8..95639d6f8c 100755 --- a/org.adempiere.ui.swing/src/org/eevolution/form/VInOutInvoiceGen.java +++ b/org.adempiere.ui.swing/src/org/eevolution/form/VInOutInvoiceGen.java @@ -905,10 +905,10 @@ public class VInOutInvoiceGen extends CPanel } @Override - public void ask(String message, Callback callback) { + public void ask(String message, Callback callback) { boolean b = ADialog.ask(m_WindowNo, this, message); if (callback != null) { - callback.onCallback(b ? "OK" : "CANCEL"); + callback.onCallback(b); } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java index 0d5c173cd8..a50ac7f6bd 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java @@ -101,6 +101,8 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb public static final String ZK_DESKTOP_SESSION_KEY = "zk.desktop"; private static final String CLIENT_INFO = "client.info"; + + private static boolean eventThreadEnabled = false; public AdempiereWebUI() { @@ -133,6 +135,8 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb Executions.getCurrent().getDesktop().addListener(new DrillCommand()); Executions.getCurrent().getDesktop().addListener(new TokenCommand()); Executions.getCurrent().getDesktop().addListener(new ZoomCommand()); + + eventThreadEnabled = Executions.getCurrent().getDesktop().getWebApp().getConfiguration().isEventThreadEnabled(); } public void onOk() @@ -392,5 +396,9 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb */ public UserPreference getUserPreference() { return userPreference; - } + } + + public static boolean isEventThreadEnabled() { + return eventThreadEnabled; + } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/ValuePreference.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/ValuePreference.java index 0455a3ef43..e921842668 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/ValuePreference.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/ValuePreference.java @@ -67,9 +67,9 @@ public class ValuePreference extends Window implements EventListener * @param aValue value * @return ValuePreference or null */ - public static ValuePreference start (GridField mField, Object aValue) + public static void start (GridField mField, Object aValue) { - return start (mField, aValue, null); + start (mField, aValue, null); } // start /** @@ -79,12 +79,12 @@ public class ValuePreference extends Window implements EventListener * @param aDisplayValue display value * @return ValuePreference or null */ - public static ValuePreference start (GridField mField, Object aValue, String aDisplayValue) + public static void start (GridField mField, Object aValue, String aDisplayValue) { if (!mField.isEditable(false)) { log.info("Field not editable (R/O)"); - return null; + return; } // Set Value/DisplayValue @@ -116,7 +116,6 @@ public class ValuePreference extends Window implements EventListener AD_Client_ID, AD_Org_ID, AD_User_ID, AD_Window_ID, Attribute, DisplayAttribute, Value, DisplayValue, displayType, AD_Reference_ID); - return vp; } // create /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java index 473adeca7b..24da50a757 100755 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java @@ -24,6 +24,7 @@ import java.util.Iterator; import java.util.List; import java.util.logging.Level; +import org.adempiere.util.Callback; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Checkbox; @@ -1295,18 +1296,27 @@ public class WAcctViewer extends Window implements EventListener private void actionRePost() { if (m_data.documentQuery - && m_data.AD_Table_ID != 0 && m_data.Record_ID != 0 - && FDialog.ask(m_data.WindowNo, this, "PostImmediate?")) + && m_data.AD_Table_ID != 0 && m_data.Record_ID != 0) { - //setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - boolean force = forcePost.isChecked(); - String error = AEnv.postImmediate (m_data.WindowNo, m_data.AD_Client_ID, - m_data.AD_Table_ID, m_data.Record_ID, force); - //setCursor(Cursor.getDefaultCursor()); - if (error != null) - FDialog.error(0, this, "PostingError-N", error); + FDialog.ask(m_data.WindowNo, this, "PostImmediate?", new Callback() { + + @Override + public void onCallback(Boolean result) + { + if (result) + { + //setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + boolean force = forcePost.isChecked(); + String error = AEnv.postImmediate (m_data.WindowNo, m_data.AD_Client_ID, + m_data.AD_Table_ID, m_data.Record_ID, force); + //setCursor(Cursor.getDefaultCursor()); + if (error != null) + FDialog.error(0, WAcctViewer.this, "PostingError-N", error); - actionQuery(); + actionQuery(); + } + } + }); } } // actionRePost diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java index e1b58b14cb..b698d361bd 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java @@ -92,15 +92,6 @@ public final class AEnv SessionManager.getAppDesktop().showWindow(window, "center"); } // showCenterScreen - /** - * Position window in center of the screen - * @param window Window to position - */ - public static void positionCenterScreen(Window window) - { - showCenterScreen(window); - } // positionCenterScreen - /** * Show in the center of the screen. * (pack, set location and set visibility) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java index f0e9c0bbe5..d5e05a7893 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java @@ -462,17 +462,17 @@ public class ProcessDialog extends Window implements EventListener, IProc public void onAfterProcess() { // - afterProcessTask(); - - // If the process is a silent one and no errors occured, close the dialog - if(m_ShowHelp != null && m_ShowHelp.equals("S")) - this.dispose(); + if (!afterProcessTask()) { + // If the process is a silent one and no errors occured, close the dialog + if(m_ShowHelp != null && m_ShowHelp.equals("S")) + this.dispose(); + } } /************************************************************************** * Optional Processing Task */ - private void afterProcessTask() + private boolean afterProcessTask() { // something to do? if (m_ids != null && m_ids.length > 0) @@ -480,11 +480,21 @@ public class ProcessDialog extends Window implements EventListener, IProc log.config(""); // Print invoices if (m_AD_Process_ID == PROCESS_C_INVOICE_GENERATE) + { printInvoices(); + return true; + } else if (m_AD_Process_ID == PROCESS_M_INOUT_GENERATE) + { printShipments(); + return true; + } + else + { + return false; + } } - + return false; } // afterProcessTask /************************************************************************** @@ -494,13 +504,17 @@ public class ProcessDialog extends Window implements EventListener, IProc { if (m_ids == null) return; - if (!FDialog.ask(m_WindowNo, this, "PrintShipments")) - return; - - m_messageText.append("

").append(Msg.getMsg(Env.getCtx(), "PrintShipments")).append("

"); - message.setContent(m_messageText.toString()); - showBusyDialog(); - Clients.response(new AuEcho(this, "onPrintShipments", null)); + FDialog.ask(m_WindowNo, this, "PrintShipments", new Callback() { + @Override + public void onCallback(Boolean result) { + if (result) { + m_messageText.append("

").append(Msg.getMsg(Env.getCtx(), "PrintShipments")).append("

"); + message.setContent(m_messageText.toString()); + showBusyDialog(); + Clients.response(new AuEcho(ProcessDialog.this, "onPrintShipments", null)); + } + } + }); } // printInvoices public void onPrintShipments() @@ -559,6 +573,10 @@ public class ProcessDialog extends Window implements EventListener, IProc log.log(Level.SEVERE, e.getLocalizedMessage(), e); } } + + // If the process is a silent one and no errors occured, close the dialog + if(m_ShowHelp != null && m_ShowHelp.equals("S")) + this.dispose(); } /** @@ -568,12 +586,19 @@ public class ProcessDialog extends Window implements EventListener, IProc { if (m_ids == null) return; - if (!FDialog.ask(m_WindowNo, this, "PrintInvoices")) - return; - m_messageText.append("

").append(Msg.getMsg(Env.getCtx(), "PrintInvoices")).append("

"); - message.setContent(m_messageText.toString()); - showBusyDialog(); - Clients.response(new AuEcho(this, "onPrintInvoices", null)); + FDialog.ask(m_WindowNo, this, "PrintInvoices", new Callback() { + @Override + public void onCallback(Boolean result) + { + if (result) + { + m_messageText.append("

").append(Msg.getMsg(Env.getCtx(), "PrintInvoices")).append("

"); + message.setContent(m_messageText.toString()); + showBusyDialog(); + Clients.response(new AuEcho(ProcessDialog.this, "onPrintInvoices", null)); + } + } + }); } // printInvoices public void onPrintInvoices() @@ -630,6 +655,10 @@ public class ProcessDialog extends Window implements EventListener, IProc log.log(Level.SEVERE, e.getLocalizedMessage(), e); } } + + // If the process is a silent one and no errors occured, close the dialog + if(m_ShowHelp != null && m_ShowHelp.equals("S")) + this.dispose(); } public boolean isValid() { @@ -661,7 +690,7 @@ public class ProcessDialog extends Window implements EventListener, IProc } @Override - public void ask(final String message, final Callback callback) { + public void ask(final String message, final Callback callback) { Executions.schedule(getDesktop(), new EventListener() { @Override public void onEvent(Event event) throws Exception { 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 52f381b864..2ddcd6ab6c 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 @@ -108,7 +108,7 @@ public class ProcessModalDialog extends Window implements EventListener, if (listener != null) { - addEventListener(ON_MODAL_CLOSE, listener); + addEventListener(ON_WINDOW_CLOSE, listener); } log.info("Process=" + pi.getAD_Process_ID()); @@ -413,7 +413,6 @@ public class ProcessModalDialog extends Window implements EventListener, private void onCancel() { m_cancel = true; this.dispose(); - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); } private void onStatusUpdate(Event event) { @@ -433,7 +432,6 @@ public class ProcessModalDialog extends Window implements EventListener, Events.postEvent(downloadDialog, new Event(MultiFileDownloadDialog.ON_SHOW)); } dispose(); - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); } @Override @@ -488,7 +486,7 @@ public class ProcessModalDialog extends Window implements EventListener, } @Override - public void ask(final String message, final Callback callback) { + public void ask(final String message, final Callback callback) { Executions.schedule(getDesktop(), new EventListener() { @Override public void onEvent(Event event) throws Exception { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFromWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFromWindow.java index 877941d2aa..50418f8a00 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFromWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFromWindow.java @@ -137,14 +137,12 @@ public class WCreateFromWindow extends Window implements EventListener, W { FDialog.error(windowNo, this, "Error", ex.getLocalizedMessage()); } - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); } // Cancel else if (e.getTarget().getId().equals(ConfirmPanel.A_CANCEL)) { isCancel = true; dispose(); - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); } // Select All // Trifon diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFileImport.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFileImport.java index 26849b915d..74a0f48e6b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFileImport.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WFileImport.java @@ -31,6 +31,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.logging.Level; +import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.Label; @@ -53,6 +54,7 @@ import org.zkoss.util.media.Media; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zul.Borderlayout; import org.zkoss.zul.Center; import org.zkoss.zul.North; @@ -116,6 +118,7 @@ public class WFileImport extends ADForm implements EventListener public WFileImport() { + this.addEventListener(Events.ON_UPLOAD, this); } /** @@ -305,6 +308,11 @@ public class WFileImport extends ADForm implements EventListener SessionManager.getAppDesktop().closeActiveWindow(); return; } + else if (e instanceof UploadEvent) + { + UploadEvent ue = (UploadEvent) e; + processUploadMedia(ue.getMedia()); + } if (m_data != null && m_data.size() > 0 // file loaded && m_format != null && m_format.getRowCount() > 0) // format loaded @@ -319,10 +327,12 @@ public class WFileImport extends ADForm implements EventListener private void cmd_loadFile() { - Media media = null; - - media = Fileupload.get(); - + Media media = Fileupload.get(); + if (AdempiereWebUI.isEventThreadEnabled()) + processUploadMedia(media); + } + + private void processUploadMedia(Media media) { if (media == null) return; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WGenForm.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WGenForm.java index c8f1eadc9e..979c9d12fe 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WGenForm.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WGenForm.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Level; +import org.adempiere.util.Callback; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.apps.BusyDialog; @@ -339,11 +340,19 @@ public class WGenForm extends ADForm implements EventListener, WTableModelListen public void onAfterProcess() { // OK to print - if (FDialog.ask(getWindowNo(), this, genForm.getAskPrintMsg())) - { - Clients.showBusy("Processing..."); - Clients.response(new AuEcho(this, "onPrint", null)); - } // OK to print + FDialog.ask(getWindowNo(), this, genForm.getAskPrintMsg(), new Callback() { + + @Override + public void onCallback(Boolean result) + { + if (result) + { + Clients.showBusy("Processing..."); + Clients.response(new AuEcho(WGenForm.this, "onPrint", null)); + } + + } + }); } public void onPrint() diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WMerge.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WMerge.java index 4ad0ed9f8e..3389558bf1 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WMerge.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WMerge.java @@ -18,6 +18,7 @@ package org.adempiere.webui.apps.form; import java.util.logging.Level; +import org.adempiere.util.Callback; import org.adempiere.webui.apps.BusyDialog; import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.Grid; @@ -238,17 +239,29 @@ public class WMerge extends Merge implements IFormController, EventListener m_msg = Msg.getMsg(Env.getCtx(), "MergeFrom") + " = " + from_Info + "\n" + Msg.getMsg(Env.getCtx(), "MergeTo") + " = " + to_Info; - if (!FDialog.ask(m_WindowNo, form, "MergeQuestion", m_msg)) - return; - updateDeleteTable(columnName); + final String columnNameRef = columnName; + final int fromIdRef = from_ID; + final int toIdRef = to_ID; + FDialog.ask(m_WindowNo, form, "MergeQuestion", m_msg, new Callback() { - progressWindow = new BusyDialog(); - progressWindow.setPage(form.getPage()); - progressWindow.doHighlighted(); - - runnable = new MergeRunnable(columnName, from_ID, to_ID); - Clients.response(new AuEcho(form, "runProcess", null)); + @Override + public void onCallback(Boolean result) + { + if (result) + { + updateDeleteTable(columnNameRef); + + progressWindow = new BusyDialog(); + progressWindow.setPage(form.getPage()); + progressWindow.doHighlighted(); + + runnable = new MergeRunnable(columnNameRef, fromIdRef, toIdRef); + Clients.response(new AuEcho(form, "runProcess", null)); + } + + } + }); } // actionPerformed class MergeRunnable implements Runnable { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPayPrint.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPayPrint.java index ab851bcc5d..88c95a30e3 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPayPrint.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPayPrint.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Level; +import org.adempiere.util.Callback; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.ConfirmPanel; @@ -57,6 +58,7 @@ import org.compiere.util.Env; import org.compiere.util.Msg; import org.compiere.util.PaymentExport; import org.compiere.util.ValueNamePair; +import org.python.antlr.ast.Call; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zul.Borderlayout; @@ -365,12 +367,20 @@ public class WPayPrint extends PayPrint implements IFormController, EventListene FDialog.info(m_WindowNo, form, "Saved", Msg.getMsg(Env.getCtx(), "NoOfLines") + "=" + no); - if (FDialog.ask(m_WindowNo, form, "VPayPrintSuccess?")) - { - // int lastDocumentNo = - MPaySelectionCheck.confirmPrint (m_checks, m_batch); - // document No not updated - } + FDialog.ask(m_WindowNo, form, "VPayPrintSuccess?", new Callback() { + + @Override + public void onCallback(Boolean result) + { + if (result) + { +// int lastDocumentNo = + MPaySelectionCheck.confirmPrint (m_checks, m_batch); + // document No not updated + } + + } + }); } else { FDialog.error(m_WindowNo, form, "Error", err.toString()); } @@ -441,6 +451,7 @@ public class WPayPrint extends PayPrint implements IFormController, EventListene log.log(Level.SEVERE, e.getLocalizedMessage(), e); return; } + final SimplePDFViewer chequeViewerRef = chequeViewer; if (lastDocumentNo != 0) { @@ -451,48 +462,55 @@ public class WPayPrint extends PayPrint implements IFormController, EventListene DB.executeUpdate(sb.toString(), null); } - SimplePDFViewer remitViewer = null; - if (FDialog.ask(m_WindowNo, form, "VPayPrintPrintRemittance")) - { - pdfList = new ArrayList(); - for (int i = 0; i < m_checks.length; i++) - { - MPaySelectionCheck check = m_checks[i]; - ReportEngine re = ReportEngine.get(Env.getCtx(), ReportEngine.REMITTANCE, check.get_ID()); - try + FDialog.ask(m_WindowNo, form, "VPayPrintPrintRemittance", new Callback() { + + @Override + public void onCallback(Boolean result) + { + SimplePDFViewer remitViewer = null; + if (result) { - File file = File.createTempFile("WPayPrint", null); - re.getPDF(file); - pdfList.add(file); - } - catch (Exception e) - { - log.log(Level.SEVERE, e.getLocalizedMessage(), e); + List pdfList = new ArrayList(); + for (int i = 0; i < m_checks.length; i++) + { + MPaySelectionCheck check = m_checks[i]; + ReportEngine re = ReportEngine.get(Env.getCtx(), ReportEngine.REMITTANCE, check.get_ID()); + try + { + File file = File.createTempFile("WPayPrint", null); + re.getPDF(file); + pdfList.add(file); + } + catch (Exception e) + { + log.log(Level.SEVERE, e.getLocalizedMessage(), e); + } + } + + try + { + File outFile = File.createTempFile("WPayPrint", null); + AEnv.mergePdf(pdfList, outFile); + String name = Msg.translate(Env.getCtx(), "Remittance"); + remitViewer = new SimplePDFViewer(form.getFormName() + " - " + name, new FileInputStream(outFile)); + remitViewer.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED); + remitViewer.setWidth("100%"); + } + catch (Exception e) + { + log.log(Level.SEVERE, e.getLocalizedMessage(), e); + } } + + dispose(); + + if (chequeViewerRef != null) + SessionManager.getAppDesktop().showWindow(chequeViewerRef); + + if (remitViewer != null) + SessionManager.getAppDesktop().showWindow(remitViewer); } - - try - { - File outFile = File.createTempFile("WPayPrint", null); - AEnv.mergePdf(pdfList, outFile); - String name = Msg.translate(Env.getCtx(), "Remittance"); - remitViewer = new SimplePDFViewer(form.getFormName() + " - " + name, new FileInputStream(outFile)); - remitViewer.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED); - remitViewer.setWidth("100%"); - } - catch (Exception e) - { - log.log(Level.SEVERE, e.getLocalizedMessage(), e); - } - } // remittance - - dispose(); - - if (chequeViewer != null) - SessionManager.getAppDesktop().showWindow(chequeViewer); - - if (remitViewer != null) - SessionManager.getAppDesktop().showWindow(remitViewer); + }); } // cmd_print diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java index 73576bd104..42598a69b8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java @@ -369,25 +369,33 @@ public class WPaySelect extends PaySelect } // Ask to Post it - if (!FDialog.ask(m_WindowNo, form, "VPaySelectGenerate?", "(" + m_ps.getName() + ")")) - return; - - // Prepare Process - int AD_Proces_ID = PROCESS_C_PAYSELECTION_CREATEPAYMENT; // C_PaySelection_CreatePayment + FDialog.ask(m_WindowNo, form, "VPaySelectGenerate?", "(" + m_ps.getName() + ")", new Callback() { - // Execute Process - ProcessModalDialog dialog = new ProcessModalDialog(this, m_WindowNo, - AD_Proces_ID, X_C_PaySelection.Table_ID, m_ps.getC_PaySelection_ID(), false); - if (dialog.isValid()) { - try { - dialog.setWidth("500px"); - dialog.setVisible(true); - dialog.setPage(form.getPage()); - dialog.doModal(); - } catch (SuspendNotAllowedException e) { - log.log(Level.SEVERE, e.getLocalizedMessage(), e); + @Override + public void onCallback(Boolean result) + { + if (result) + { + // Prepare Process + int AD_Proces_ID = PROCESS_C_PAYSELECTION_CREATEPAYMENT; // C_PaySelection_CreatePayment + + // Execute Process + ProcessModalDialog dialog = new ProcessModalDialog(WPaySelect.this, m_WindowNo, + AD_Proces_ID, X_C_PaySelection.Table_ID, m_ps.getC_PaySelection_ID(), false); + if (dialog.isValid()) { + try { + dialog.setWidth("500px"); + dialog.setVisible(true); + dialog.setPage(form.getPage()); + dialog.doHighlighted(); + } catch (SuspendNotAllowedException e) { + log.log(Level.SEVERE, e.getLocalizedMessage(), e); + } + } + } + } - } + }); } // generatePaySelect /** @@ -447,7 +455,7 @@ public class WPaySelect extends PaySelect } @Override - public void ask(final String message, final Callback callback) { + public void ask(final String message, final Callback callback) { Executions.schedule(form.getDesktop(), new EventListener() { @Override public void onEvent(Event event) throws Exception { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPayment.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPayment.java index 5e566db233..52cc4750fc 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPayment.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPayment.java @@ -940,13 +940,6 @@ public class WPayment extends Window } } // actionPerformed - @Override - public void dispose() { - super.dispose(); - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); - } - - public void lockUI() { if (m_isLocked) return; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java index 8faa85c5d1..685145abc1 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java @@ -19,6 +19,7 @@ package org.adempiere.webui.apps.form; import java.util.ArrayList; import java.util.logging.Level; +import org.adempiere.util.Callback; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Checkbox; @@ -388,17 +389,26 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController */ private void action_treeAddAll() { - if (FDialog.ask(m_WindowNo, null, "TreeAddAllItems")) { // idempiere-85 - log.info(""); - ListModel model = centerList.getModel(); - int size = model.getSize(); - int index = -1; - for (index = 0; index < size; index++) + // idempiere-85 + FDialog.ask(m_WindowNo, null, "TreeAddAllItems", new Callback() { + + @Override + public void onCallback(Boolean result) { - ListItem item = (ListItem)model.getElementAt(index); - action_treeAdd(item); + if (result) + { + log.info(""); + ListModel model = centerList.getModel(); + int size = model.getSize(); + int index = -1; + for (index = 0; index < size; index++) + { + ListItem item = (ListItem)model.getElementAt(index); + action_treeAdd(item); + } + } } - } + }); } // action_treeAddAll /** @@ -407,16 +417,26 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController private void action_treeDeleteAll() { log.info(""); - if (FDialog.ask(m_WindowNo, null, "TreeRemoveAllItems")) { // idempiere-85 - ListModel model = centerList.getModel(); - int size = model.getSize(); - int index = -1; - for (index = 0; index < size; index++) + // idempiere-85 + FDialog.ask(m_WindowNo, null, "TreeRemoveAllItems", new Callback() { + + @Override + public void onCallback(Boolean result) { - ListItem item = (ListItem)model.getElementAt(index); - action_treeDelete(item); + if (result) + { + ListModel model = centerList.getModel(); + int size = model.getSize(); + int index = -1; + for (index = 0; index < size; index++) + { + ListItem item = (ListItem)model.getElementAt(index); + action_treeDelete(item); + } + } + } - } + }); } // action_treeDeleteAll public ADForm getForm() diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFEditor.java index d2b1f2013a..f40cccaa48 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WFEditor.java @@ -27,6 +27,8 @@ import org.adempiere.webui.component.Listbox; import org.adempiere.webui.component.ListboxFactory; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.ToolBar; +import org.adempiere.webui.component.Window; +import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.panel.ADForm; import org.compiere.apps.wf.WFGraphLayout; import org.compiere.apps.wf.WFNodeWidget; @@ -62,7 +64,6 @@ import org.zkoss.zul.Separator; import org.zkoss.zul.Space; import org.zkoss.zul.Toolbarbutton; import org.zkoss.zul.Vbox; -import org.zkoss.zul.Window; /** * @@ -208,24 +209,26 @@ public class WFEditor extends ADForm { w.onClose(); } }); - try { - w.setWidth("250px"); - w.setBorder("normal"); - w.setPage(this.getPage()); - w.doModal(); - } catch (SuspendNotAllowedException e) { - e.printStackTrace(); - } + + w.setWidth("250px"); + w.setBorder("normal"); + w.setPage(this.getPage()); + w.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { - String name = text.getText(); - if (name != null && name.length() > 0) - { - int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx()); - MWFNode node = new MWFNode(m_wf, name, name); - node.setClientOrg(AD_Client_ID, 0); - node.saveEx(); - reload(m_wf.getAD_Workflow_ID()); - } + @Override + public void onEvent(Event event) throws Exception { + String name = text.getText(); + if (name != null && name.length() > 0) + { + int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx()); + MWFNode node = new MWFNode(m_wf, name, name); + node.setClientOrg(AD_Client_ID, 0); + node.saveEx(); + reload(m_wf.getAD_Workflow_ID()); + } + } + }); + w.doHighlighted(); } void reload(int workflowId) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java index 88544fea35..27472b251e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java @@ -26,6 +26,7 @@ import org.compiere.util.Env; import org.compiere.util.Msg; import org.compiere.util.Util; import org.zkoss.zhtml.Text; +import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; @@ -63,8 +64,7 @@ public class Messagebox extends Window implements EventListener private Image img = new Image(); private int returnValue; - private Callback callback; - private String callbackValue; + private Callback callback; /** A OK button. */ public static final int OK = 0x0001; @@ -199,7 +199,12 @@ public class Messagebox extends Window implements EventListener return show(message, title, buttons, icon, null); } - public int show(String message, String title, int buttons, String icon, Callback callback) + public int show(String message, String title, int buttons, String icon, Callback callback) + { + return show(message, title, buttons, icon, callback, false); + } + + public int show(String message, String title, int buttons, String icon, Callback callback, boolean modal) { this.msg = message; this.imgSrc = icon; @@ -239,10 +244,7 @@ public class Messagebox extends Window implements EventListener this.setTitle(title); this.setPosition("center"); this.setClosable(true); - if (Events.inEventListener()) - this.setAttribute(Window.MODE_KEY, Window.MODE_MODAL); - else - this.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); + this.setAttribute(Window.MODE_KEY, modal ? Window.MODE_MODAL : Window.MODE_HIGHLIGHTED); this.setSizable(true); this.setVisible(true); @@ -251,16 +253,21 @@ public class Messagebox extends Window implements EventListener return returnValue; } - public static int showDialog(String message, String title, int buttons, String icon) throws InterruptedException + public static int showDialog(String message, String title, int buttons, String icon) { return showDialog(message, title, buttons, icon, null); } - public static int showDialog(String message, String title, int buttons, String icon, Callback callback) throws InterruptedException + public static int showDialog(String message, String title, int buttons, String icon, Callback callback) + { + return showDialog(message, title, buttons, icon, callback, false); + } + + public static int showDialog(String message, String title, int buttons, String icon, Callback callback, boolean modal) { Messagebox msg = new Messagebox(); - return msg.show(message, title, buttons, icon, callback); + return msg.show(message, title, buttons, icon, callback, modal); } public void onEvent(Event event) throws Exception @@ -268,53 +275,44 @@ public class Messagebox extends Window implements EventListener if (event == null) return; - callbackValue = null; - if (event.getTarget() == btnOk) { returnValue = OK; - callbackValue = "OK"; } else if (event.getTarget() == btnCancel) { returnValue = CANCEL; - callbackValue = "CANCEL"; } else if (event.getTarget() == btnYes) { returnValue = YES; - callbackValue = "YES"; } else if (event.getTarget() == btnNo) { returnValue = NO; - callbackValue = "NO"; } else if (event.getTarget() == btnAbort) { returnValue = ABORT; - callbackValue = "ABORT"; } else if (event.getTarget() == btnRetry) { returnValue = RETRY; - callbackValue = "RETRY"; } else if (event.getTarget() == btnIgnore) { returnValue = IGNORE; - callbackValue = "IGNORE"; } this.detach(); } @Override - public void detach() { - super.detach(); + public void onPageDetached(Page page) { + super.onPageDetached(page); if (callback != null) { - callback.onCallback(callbackValue); + callback.onCallback(returnValue); } } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Window.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Window.java index 18054a2e77..410492b109 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Window.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Window.java @@ -17,6 +17,11 @@ package org.adempiere.webui.component; +import org.adempiere.webui.event.DialogEvents; +import org.zkoss.zk.ui.Page; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.Events; + /** * * @author Ashley G Ramdass @@ -62,4 +67,15 @@ public class Window extends org.zkoss.zul.Window { detach(); } + + /* (non-Javadoc) + * @see org.zkoss.zul.Window#onPageDetached(org.zkoss.zk.ui.Page) + */ + @Override + public void onPageDetached(Page page) { + super.onPageDetached(page); + Events.sendEvent(this, new Event(DialogEvents.ON_WINDOW_CLOSE, this, null)); + } + + } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/AbstractDesktop.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/AbstractDesktop.java index ffb4891dab..7de1385727 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/AbstractDesktop.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/AbstractDesktop.java @@ -16,14 +16,18 @@ package org.adempiere.webui.desktop; import java.util.ArrayList; import java.util.List; +import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.ClientInfo; import org.adempiere.webui.component.Window; +import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.exception.ApplicationException; import org.adempiere.webui.part.AbstractUIPart; import org.compiere.model.MMenu; import org.compiere.util.CLogger; import org.compiere.util.Env; -import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; /** * Base class for desktop implementation @@ -142,17 +146,11 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop * @param win * @param pos */ - public void showWindow(Window win, String pos) + public void showWindow(final Window win, final String pos) { - win.setPage(page); Object objMode = win.getAttribute(Window.MODE_KEY); - String mode = Window.MODE_MODAL; - - if (objMode != null) - { - mode = objMode.toString(); - } + final String mode = objMode != null ? objMode.toString() : Window.MODE_HIGHLIGHTED; if (Window.MODE_MODAL.equals(mode)) { @@ -160,7 +158,27 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop win.setPosition(pos); showModal(win); } - else if (Window.MODE_POPUP.equals(mode)) + else + { + if (Executions.getCurrent() != null) + { + showNonModalWindow(win, pos, mode); + } + else + { + Executions.schedule(getComponent().getDesktop(), new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + showNonModalWindow(win, pos, mode); + } + }, new Event("onExecute")); + } + } + } + + private void showNonModalWindow(final Window win, final String pos, + final String mode) { + if (Window.MODE_POPUP.equals(mode)) { showPopup(win, pos); } @@ -175,7 +193,7 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop else if (Window.MODE_HIGHLIGHTED.equals(mode)) { showHighlighted(win, pos); - } + } } protected abstract void showEmbedded(Window win); @@ -184,18 +202,47 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop * * @param win */ - protected void showModal(Window win) + protected void showModal(final Window win) { - //fall back to highlighted if can't execute doModal - if (Events.inEventListener()) + if (AdempiereWebUI.isEventThreadEnabled()) { - win.doModal(); + win.setPage(page); + win.doModal(); } - else + else { - showHighlighted(win, null); + if (Executions.getCurrent() != null) + { + throw new RuntimeException("When event thread is disabled, you can only show modal window in background thread that doesn't update Desktop."); + } + + final StringBuffer buffer = new StringBuffer(); + win.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + buffer.append("*"); + } + }); + + Executions.schedule(this.getComponent().getDesktop(), new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + showHighlighted(win, null); + if (win.getPage() == null) { + buffer.append("*"); + } + } + }, new Event("onExecute")); + + while(buffer.length() == 0) + { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + Thread.interrupted(); + } + } } - } /** @@ -210,6 +257,7 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop else win.setPosition(position); + win.setPage(page); win.doPopup(); } @@ -225,6 +273,7 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop else win.setPosition(position); + win.setPage(page); win.doOverlapped(); } @@ -240,6 +289,7 @@ public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop else win.setPosition(position); + win.setPage(page); win.doHighlighted(); } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAccountEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAccountEditor.java index 1e935a74a8..60c82ce6d8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAccountEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WAccountEditor.java @@ -17,6 +17,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.logging.Level; +import org.adempiere.util.Callback; import org.adempiere.webui.component.Combinationbox; import org.adempiere.webui.event.ContextMenuEvent; import org.adempiere.webui.event.ContextMenuListener; @@ -96,18 +97,24 @@ public class WAccountEditor extends WEditor implements ContextMenuListener { C_AcctSchema_ID = Env.getContextAsInt(Env.getCtx(), "$C_AcctSchema_ID"); } - WAccountDialog ad = new WAccountDialog (gridField.getHeader(), m_mAccount, C_AcctSchema_ID); - // - Integer newValue = ad.getValue(); - if (newValue == null) - return; + new WAccountDialog (gridField.getHeader(), m_mAccount, C_AcctSchema_ID, new Callback() { + + @Override + public void onCallback(Integer result) { + Integer newValue = result; + + if (newValue == null) + return; - Object oldValue = m_value; + Object oldValue = m_value; - // set & redisplay - setValue(newValue); - ValueChangeEvent changeEvent = new ValueChangeEvent(this, this.getColumnName(), oldValue, newValue); - fireValueChange(changeEvent); + // set & redisplay + setValue(newValue); + ValueChangeEvent changeEvent = new ValueChangeEvent(WAccountEditor.this, getColumnName(), oldValue, newValue); + fireValueChange(changeEvent); + } + }); + // } // cmd_button /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFilenameEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFilenameEditor.java index d99f7196f7..c3b08bf354 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFilenameEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WFilenameEditor.java @@ -21,13 +21,16 @@ import java.io.IOException; import java.io.InputStream; import java.util.logging.Level; +import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.component.FilenameBox; import org.adempiere.webui.event.ValueChangeEvent; import org.compiere.model.GridField; import org.compiere.util.CLogger; import org.zkoss.util.media.Media; +import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zul.Fileupload; /** @@ -107,6 +110,12 @@ public class WFilenameEditor extends WEditor cmd_file(); newValue = getComponent().getText(); } + else if (event instanceof UploadEvent) + { + UploadEvent ue = (UploadEvent) event; + processUploadMedia(ue.getMedia()); + return; + } else { return; @@ -122,16 +131,30 @@ public class WFilenameEditor extends WEditor fireValueChange(changeEvent); } + private Component parent = null; + /** * Load file */ private void cmd_file() { + if (parent == null || getComponent().getParent() != parent) + { + if (parent != null) + { + parent.removeEventListener(Events.ON_UPLOAD, this); + } + parent = getComponent().getParent(); + parent.addEventListener(Events.ON_UPLOAD, this); + } + // Show File Open Dialog - Media file = null; - - file = Fileupload.get(true); + Media media = Fileupload.get(true); + if (AdempiereWebUI.isEventThreadEnabled()) + processUploadMedia(media); + } // cmd_file + private void processUploadMedia(Media file) { if (file == null) return; @@ -173,7 +196,7 @@ public class WFilenameEditor extends WEditor } getComponent().setText(fileName); - } // cmd_file + } public String[] getEvents() { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WImageEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WImageEditor.java index cfd535e3aa..4dd241d281 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WImageEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WImageEditor.java @@ -16,6 +16,7 @@ package org.adempiere.webui.editor; import java.util.logging.Level; +import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.window.WImageDialog; import org.compiere.model.GridField; @@ -24,6 +25,7 @@ import org.compiere.util.CLogger; import org.compiere.util.Env; import org.zkoss.image.AImage; import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zul.Image; @@ -153,20 +155,27 @@ public class WImageEditor extends WEditor { if (Events.ON_CLICK.equals(event.getName()) && readwrite) { - WImageDialog vid = new WImageDialog(m_mImage); - if (!vid.isCancel()) { - int AD_Image_ID = vid.getAD_Image_ID(); - Object oldValue = getValue(); - Integer newValue = null; - if (AD_Image_ID != 0) - newValue = new Integer (AD_Image_ID); - // - m_mImage = null; // force reload - setValue(newValue); // set explicitly - // - ValueChangeEvent vce = new ValueChangeEvent(this, gridField.getColumnName(), oldValue, newValue); - fireValueChange(vce); - } + final WImageDialog vid = new WImageDialog(m_mImage); + vid.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + if (!vid.isCancel()) { + int AD_Image_ID = vid.getAD_Image_ID(); + Object oldValue = getValue(); + Integer newValue = null; + if (AD_Image_ID != 0) + newValue = new Integer (AD_Image_ID); + // + m_mImage = null; // force reload + setValue(newValue); // set explicitly + // + ValueChangeEvent vce = new ValueChangeEvent(WImageEditor.this, gridField.getColumnName(), oldValue, newValue); + fireValueChange(vce); + } + + } + }); } } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java index c3bec55306..f2d886c2a8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java @@ -19,6 +19,7 @@ import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.PAttributebox; import org.adempiere.webui.event.ContextMenuEvent; import org.adempiere.webui.event.ContextMenuListener; +import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.window.WFieldRecordInfo; import org.adempiere.webui.window.WPAttributeDialog; @@ -31,6 +32,7 @@ import org.compiere.model.SystemIDs; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; /** @@ -150,7 +152,7 @@ public class WPAttributeEditor extends WEditor implements ContextMenuListener, S { // Integer oldValue = (Integer)getValue (); - int oldValueInt = oldValue == null ? 0 : oldValue.intValue (); + final int oldValueInt = oldValue == null ? 0 : oldValue.intValue (); int M_AttributeSetInstance_ID = oldValueInt; int M_Product_ID = 0; int M_ProductBOM_ID = 0; @@ -167,7 +169,7 @@ public class WPAttributeEditor extends WEditor implements ContextMenuListener, S + ", AD_Column_ID=" + gridField.getAD_Column_ID()); // M_Product.M_AttributeSetInstance_ID = 8418 - boolean productWindow = (gridField.getAD_Column_ID() == COLUMN_M_PRODUCT_M_ATTRIBUTESETINSTANCE_ID); // HARDCODED + final boolean productWindow = (gridField.getAD_Column_ID() == COLUMN_M_PRODUCT_M_ATTRIBUTESETINSTANCE_ID); // HARDCODED // Exclude ability to enter ASI boolean exclude = true; @@ -183,29 +185,44 @@ public class WPAttributeEditor extends WEditor implements ContextMenuListener, S } } - boolean changed = false; if (M_ProductBOM_ID != 0) // Use BOM Component M_Product_ID = M_ProductBOM_ID; // if (!productWindow && (M_Product_ID == 0 || exclude)) { - changed = true; getComponent().setText(null); M_AttributeSetInstance_ID = 0; + + processChanges(oldValueInt, M_AttributeSetInstance_ID); } else { - WPAttributeDialog vad = new WPAttributeDialog ( + final WPAttributeDialog vad = new WPAttributeDialog ( M_AttributeSetInstance_ID, M_Product_ID, m_C_BPartner_ID, productWindow, gridField.getAD_Column_ID(), m_WindowNo); - if (vad.isChanged()) - { - getComponent().setText(vad.getM_AttributeSetInstanceName()); - M_AttributeSetInstance_ID = vad.getM_AttributeSetInstance_ID(); - if (m_GridTab != null && !productWindow && vad.getM_Locator_ID() > 0) - m_GridTab.setValue("M_Locator_ID", vad.getM_Locator_ID()); - changed = true; - } + vad.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + boolean changed = false; + int M_AttributeSetInstance_ID = 0; + if (vad.isChanged()) + { + getComponent().setText(vad.getM_AttributeSetInstanceName()); + M_AttributeSetInstance_ID = vad.getM_AttributeSetInstance_ID(); + if (m_GridTab != null && !productWindow && vad.getM_Locator_ID() > 0) + m_GridTab.setValue("M_Locator_ID", vad.getM_Locator_ID()); + changed = true; + } + + // Set Value + if (changed) + { + processChanges(oldValueInt, M_AttributeSetInstance_ID); + } // change + } + }); + } /** Selection { @@ -243,28 +260,26 @@ public class WPAttributeEditor extends WEditor implements ContextMenuListener, S } } } - **/ - - // Set Value - if (changed) - { - log.finest("Changed M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID); - m_value = new Object(); // force re-query display - if (M_AttributeSetInstance_ID == 0) - setValue(null); - else - setValue(new Integer(M_AttributeSetInstance_ID)); - - ValueChangeEvent vce = new ValueChangeEvent(this, gridField.getColumnName(), new Object(), getValue()); - fireValueChange(vce); - if (M_AttributeSetInstance_ID == oldValueInt && m_GridTab != null && gridField != null) - { - // force Change - user does not realize that embedded object is already saved. - m_GridTab.processFieldChange(gridField); - } - } // change + **/ } // cmd_file + private void processChanges(int oldValueInt, int M_AttributeSetInstance_ID) { + log.finest("Changed M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID); + m_value = new Object(); // force re-query display + if (M_AttributeSetInstance_ID == 0) + setValue(null); + else + setValue(new Integer(M_AttributeSetInstance_ID)); + + ValueChangeEvent vce = new ValueChangeEvent(this, gridField.getColumnName(), new Object(), getValue()); + fireValueChange(vce); + if (M_AttributeSetInstance_ID == oldValueInt && m_GridTab != null && gridField != null) + { + // force Change - user does not realize that embedded object is already saved. + m_GridTab.processFieldChange(gridField); + } + } + public String[] getEvents() { return LISTENER_EVENTS; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java index df2d5e52f8..37152acf9a 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java @@ -28,6 +28,7 @@ import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Searchbox; import org.adempiere.webui.event.ContextMenuEvent; import org.adempiere.webui.event.ContextMenuListener; +import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.event.ValueChangeListener; import org.adempiere.webui.factory.InfoManager; @@ -46,6 +47,7 @@ import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; /** @@ -476,9 +478,6 @@ public class WSearchEditor extends WEditor implements ContextMenuListener, Value * - Window closed -> ignore => result == null && !cancalled */ - Object result[] = null; - boolean cancelled = false; - // Zoom / Validation String whereClause = getWhereClause(); @@ -493,37 +492,41 @@ public class WSearchEditor extends WEditor implements ContextMenuListener, Value if (m_tableName == null) // sets table name & key column getDirectAccessSQL("*"); - InfoPanel ip = InfoManager.create(lookup, gridField, m_tableName, m_keyColumnName, queryValue, false, whereClause); + final InfoPanel ip = InfoManager.create(lookup, gridField, m_tableName, m_keyColumnName, queryValue, false, whereClause); ip.setVisible(true); ip.setStyle("border: 2px"); ip.setClosable(true); - ip.setAttribute("mode", "modal"); ip.addValueChangeListener(this); infoPanel = ip; + ip.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + boolean cancelled = ip.isCancelled(); + Object[] result = ip.getSelectedKeys(); + + infoPanel = null; + // Result + if (result != null && result.length > 0) + { + //ensure data binding happen + if (result.length > 1) + actionCombo (result); + else + actionCombo (result[0]); + } + else if (cancelled) + { + log.config(getColumnName() + " - Result = null (cancelled)"); + actionCombo(null); + } + else + { + log.config(getColumnName() + " - Result = null (not cancelled)"); + } + } + }); AEnv.showWindow(ip); - cancelled = ip.isCancelled(); - result = ip.getSelectedKeys(); - - infoPanel = null; - // Result - if (result != null && result.length > 0) - { - //ensure data binding happen - if (result.length > 1) - actionCombo (result); - else - actionCombo (result[0]); - } - else if (cancelled) - { - log.config(getColumnName() + " - Result = null (cancelled)"); - actionCombo(null); - } - else - { - log.config(getColumnName() + " - Result = null (not cancelled)"); - } - } /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/event/DialogEvents.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/event/DialogEvents.java index 72b29493c8..4373526d5b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/event/DialogEvents.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/event/DialogEvents.java @@ -21,8 +21,8 @@ package org.adempiere.webui.event; public interface DialogEvents { /** - * on modal close event, use this for highlight mode modal dialog to perform action after the modal dialog closed. + * on window close event, use this for highlight mode window to simulate modal window */ - public final static String ON_MODAL_CLOSE = "onModalClose"; + public final static String ON_WINDOW_CLOSE = "onWindowClose"; } 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 ff6804f447..4d6094f4f0 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 @@ -17,9 +17,6 @@ package org.adempiere.webui.panel; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyVetoException; -import java.beans.VetoableChangeListener; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -55,7 +52,6 @@ import org.compiere.model.DataStatusEvent; import org.compiere.model.DataStatusListener; import org.compiere.model.GridField; import org.compiere.model.GridTab; -import org.compiere.model.GridTable; import org.compiere.model.GridWindow; import org.compiere.model.MLookup; import org.compiere.model.MTree; @@ -96,7 +92,7 @@ import org.zkoss.zul.impl.XulElement; * @author Low Heng Sin */ public class ADTabpanel extends Div implements Evaluatee, EventListener, -DataStatusListener, IADTabpanel, VetoableChangeListener +DataStatusListener, IADTabpanel { private static final String ON_DEFER_SET_SELECTED_NODE = "onDeferSetSelectedNode"; @@ -152,8 +148,6 @@ DataStatusListener, IADTabpanel, VetoableChangeListener private Group currentGroup; - private boolean m_vetoActive = false; - public ADTabpanel() { init(); @@ -251,7 +245,6 @@ DataStatusListener, IADTabpanel, VetoableChangeListener listPanel.setWindowNo(windowNo); listPanel.setADWindowPanel(winPanel); - gridTab.getTableModel().addVetoableChangeListener(this); } /** @@ -1213,34 +1206,6 @@ DataStatusListener, IADTabpanel, VetoableChangeListener return false; } - /** - * @param e - * @see VetoableChangeListener#vetoableChange(PropertyChangeEvent) - */ - public void vetoableChange(PropertyChangeEvent e) - throws PropertyVetoException { - // Save Confirmation dialog MTable-RowSave - if (e.getPropertyName().equals(GridTable.PROPERTY)) - { - // throw new PropertyVetoException will call this listener again to revert to old value - if (m_vetoActive) - { - //ignore - m_vetoActive = false; - return; - } - if (!Env.isAutoCommit(Env.getCtx(), getWindowNo()) || gridTab.getCommitWarning().length() > 0) - { - if (!FDialog.ask(getWindowNo(), this, "SaveChanges?", gridTab.getCommitWarning())) - { - m_vetoActive = true; - throw new PropertyVetoException ("UserDeniedSave", e); - } - } - return; - } // saveConfirmation - } - /** * @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 d6867adcc6..c040599ae5 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 @@ -494,14 +494,14 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To { if (!includedMap.containsKey(gTab.getAD_Tab_ID())) { - setActiveTab(gridWindow.getTabIndex(gTab)); + setActiveTab(gridWindow.getTabIndex(gTab), null); } else { IADTabpanel parent = includedMap.get(gTab.getAD_Tab_ID()); int pindex = gridWindow.getTabIndex(parent.getGridTab()); if (pindex >= 0) - setActiveTab(pindex); + setActiveTab(pindex, null); } gTab.navigate(i); return true; @@ -707,7 +707,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To where.toString(), findFields, 10, mTab.getAD_Tab_ID()); // no query below 10 if (find.isValid()) { - find.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener() { + find.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { if (!find.isCancel()) @@ -750,7 +750,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To int curInd = adTab.getSelectedIndex(); if (curInd < maxInd) { - setActiveTab(curInd + 1); + setActiveTab(curInd + 1, null); } focusToActivePanel(); @@ -764,7 +764,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To int curInd = adTab.getSelectedIndex(); if (curInd > 0) { - setActiveTab(curInd - 1); + setActiveTab(curInd - 1, null); } focusToActivePanel(); @@ -865,19 +865,39 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To if (gridWindow.isTransaction()) { - if (curTab.needSave(true, true) && !onSave(false)) - return; - - final WOnlyCurrentDays ocd = new WOnlyCurrentDays(); - ocd.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener() { + final Runnable runnable = new Runnable() { @Override - public void onEvent(Event event) throws Exception { - m_onlyCurrentDays = ocd.getCurrentDays(); - history(m_onlyCurrentDays); - focusToActivePanel(); + public void run() { + final WOnlyCurrentDays ocd = new WOnlyCurrentDays(); + ocd.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + m_onlyCurrentDays = ocd.getCurrentDays(); + history(m_onlyCurrentDays); + focusToActivePanel(); + } + }); + AEnv.showWindow(ocd); } - }); - AEnv.showWindow(ocd); + }; + if (curTab.needSave(true, true)) + { + onSave(false, new Callback() { + + @Override + public void onCallback(Boolean result) + { + if (result) + { + runnable.run(); + } + } + }); + } + else + { + runnable.run(); + } } } @@ -917,13 +937,18 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To return; } + EventListener listener = new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + curTab.loadAttachments(); // reload + toolbar.getButton("Attachment").setPressed(curTab.hasAttachment()); + focusToActivePanel(); + } + }; // Attachment va = new WAttachment ( curWindowNo, curTab.getAD_AttachmentID(), - curTab.getAD_Table_ID(), record_ID, null); - - curTab.loadAttachments(); // reload - toolbar.getButton("Attachment").setPressed(curTab.hasAttachment()); - focusToActivePanel(); + curTab.getAD_Table_ID(), record_ID, null, listener); } public void onChat() @@ -953,7 +978,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To String description = infoName + ": " + infoDisplay; WChat chat = new WChat(curWindowNo, curTab.getCM_ChatID(), curTab.getAD_Table_ID(), recordId, description, null); - chat.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener() { + chat.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { curTab.loadChats(); @@ -1023,34 +1048,43 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To { int newTabIndex = tabList.getSelectedIndex(); - if (setActiveTab(newTabIndex)) - { - //force sync model - tabList.refresh(); - } - else - { - //reset to original - tabList.setSelectedIndex(curTabIndex); - } + final IADTabList tabListRef = tabList; + final int originalTabIndex = curTabIndex; + setActiveTab(newTabIndex, new Callback() { + + @Override + public void onCallback(Boolean result) { + if (result) + { + //force sync model + tabListRef.refresh(); + } + else + { + //reset to original + tabListRef.setSelectedIndex(originalTabIndex); + } + + } + }); } } else if (event.getTarget() instanceof ProcessModalDialog) { ProcessModalDialog dialog = (ProcessModalDialog) event.getTarget(); onModalClose(dialog.getProcessInfo()); - onRefresh(false); + onRefresh(false, false); } } - private boolean setActiveTab(int newTabIndex) { - boolean back = false; + private void setActiveTab(final int newTabIndex, final Callback callback) { - int oldTabIndex = curTabIndex; + final int oldTabIndex = curTabIndex; if (oldTabIndex == newTabIndex) { - return true; + if (callback != null) + callback.onCallback(true); } if (curTab != null) @@ -1062,6 +1096,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To ((ADSortTab)curTabpanel).saveData(); ((ADSortTab)curTabpanel).unregisterPanel(); } + setActiveTab0(oldTabIndex, newTabIndex, callback); } else if (curTab.needSave(true, false)) { @@ -1075,40 +1110,73 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To { showLastError(); // there is a problem, stop here - return false; + if (callback != null) + callback.onCallback(false); + return; } + setActiveTab0(oldTabIndex, newTabIndex, callback); } // explicitly ask when changing tabs - else if (FDialog.ask(curWindowNo, this.getComponent(), "SaveChanges?", curTab.getCommitWarning())) - { // yes we want to save - if (!curTab.dataSave(true)) - { - showLastError(); - // there is a problem, stop here - return false; - } - } - else // Don't save + else { - int newRecord= curTab.getTableModel().getNewRow(); //VOSS COM + FDialog.ask(curWindowNo, this.getComponent(), "SaveChanges?", curTab.getCommitWarning(), new Callback() { - if( newRecord == -1) - curTab.dataIgnore(); - else - { - return false; - } + @Override + public void onCallback(Boolean result) { + if (result) + { // yes we want to save + if (!curTab.dataSave(true)) + { + showLastError(); + // there is a problem, stop here + if (callback != null) + callback.onCallback(false); + return; + } + setActiveTab0(oldTabIndex, newTabIndex, callback); + } + else // Don't save + { + int newRecord= curTab.getTableModel().getNewRow(); //VOSS COM + + if( newRecord == -1) + curTab.dataIgnore(); + else + { + if (callback != null) + callback.onCallback(false); + return; + } + setActiveTab0(oldTabIndex, newTabIndex, callback); + } + + } + }); + } } - else // new record, but nothing changed + else + { + // new record, but nothing changed curTab.dataIgnore(); + setActiveTab0(oldTabIndex, newTabIndex, callback); + } } // there is a change + else + setActiveTab0(oldTabIndex, newTabIndex, callback); } + else + setActiveTab0(oldTabIndex, newTabIndex, callback); + } + private void setActiveTab0(int oldTabIndex, int newTabIndex, + final Callback callback) { + boolean back = false; if (!adTab.updateSelectedIndex(oldTabIndex, newTabIndex)) { FDialog.warn(curWindowNo, "TabSwitchJumpGo", title); - return false; + if (callback != null) + callback.onCallback(false); } IADTabpanel oldTabpanel = curTabpanel; @@ -1164,7 +1232,8 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To updateToolbar(); - return true; + if (callback != null) + callback.onCallback(true); } private void updateToolbar() @@ -1422,12 +1491,36 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To * refresh all row * @param fireEvent */ - public void onRefresh(boolean fireEvent) + public void onRefresh(final boolean fireEvent) { - onSave(false); - curTab.dataRefreshAll(fireEvent, true); - curTabpanel.dynamicDisplay(0); - focusToActivePanel(); + onRefresh(fireEvent, true); + } + + /** + * refresh all row + * @param fireEvent + * @param saveCurrentRow + */ + public void onRefresh(final boolean fireEvent, final boolean saveCurrentRow) + { + if (saveCurrentRow) + { + onSave(false, new Callback() { + + @Override + public void onCallback(Boolean result) { + curTab.dataRefreshAll(fireEvent, true); + curTabpanel.dynamicDisplay(0); + focusToActivePanel(); + } + }); + } + else + { + curTab.dataRefreshAll(fireEvent, true); + curTabpanel.dynamicDisplay(0); + focusToActivePanel(); + } } /** @@ -1458,45 +1551,47 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To return; } - if (!autoSave()) { - return; - } - - newRecord = curTab.dataNew(false); - if (newRecord) - { - curTabpanel.dynamicDisplay(0); - toolbar.enableChanges(false); - toolbar.enableDelete(false); - toolbar.enableDeleteSelection(false); - toolbar.enableNavigation(false); - toolbar.enableTabNavigation(false); - toolbar.enableIgnore(true); - toolbar.enablePrint(curTab.isPrinted()); - toolbar.enableReport(true); - } - else - { - logger.severe("Could not create new record"); - } - focusToActivePanel(); + autoSave(new Callback() { + @Override + public void onCallback(Boolean result) { + if (result) + { + newRecord = curTab.dataNew(false); + if (newRecord) + { + curTabpanel.dynamicDisplay(0); + toolbar.enableChanges(false); + toolbar.enableDelete(false); + toolbar.enableDeleteSelection(false); + toolbar.enableNavigation(false); + toolbar.enableTabNavigation(false); + toolbar.enableIgnore(true); + toolbar.enablePrint(curTab.isPrinted()); + toolbar.enableReport(true); + } + else + { + logger.severe("Could not create new record"); + } + focusToActivePanel(); + } + } + }); } - private boolean autoSave() { + private void autoSave(Callback callback) { // has anything changed? if (curTab.needSave(true, false)) { // do we have real change if (curTab.needSave(true, true)) { - if (!onSave(false)) - { - return false; - } + onSave(false, callback); } else // new record, but nothing changed curTab.dataIgnore(); } // there is a change - return true; + if (callback != null) + callback.onCallback(true); } // Elaine 2008/11/19 @@ -1540,10 +1635,19 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To if (curTab == null) return; - if (!onSave(false)) - return; + onSave(false, new Callback() { - // Gets Fields from AD_Field_v + @Override + public void onCallback(Boolean result) { + if (result) { + doOnFind(); + } + } + }); + } + + private void doOnFind() { + // Gets Fields from AD_Field_v GridField[] findFields = GridField.createFields(ctx, curTab.getWindowNo(), 0,curTab.getAD_Tab_ID()); final FindWindow find = new FindWindow (curTab.getWindowNo(), curTab.getName(), curTab.getAD_Table_ID(), curTab.getTableName(), @@ -1556,7 +1660,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To return; } - find.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener() { + find.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { if (!find.isCancel()) @@ -1584,7 +1688,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To } }); AEnv.showWindow(find); - } + } /** * @see ToolbarListener#onIgnore() @@ -1611,89 +1715,113 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To */ public void onSave() { - if(onSave(true)) - { - String statusLine = statusBar.getStatusLine(); - curTab.dataRefreshAll(true, true); - statusBar.setStatusLine(statusLine); - } - focusToActivePanel(); + onSave(true, new Callback() { + @Override + public void onCallback(Boolean result) + { + if (result) + { + String statusLine = statusBar.getStatusLine(); + curTab.dataRefreshAll(true, true); + statusBar.setStatusLine(statusLine); + } + focusToActivePanel(); + } + }); } /** * @param onSaveEvent */ - private boolean onSave(boolean onSaveEvent) + private void onSave(final boolean onSaveEvent, final Callback callback) { - boolean newRecord = (curTab.getRecord_ID() <= 0); - boolean wasChanged = toolbar.isSaveEnable(); + final boolean newRecord = (curTab.getRecord_ID() <= 0); + final boolean wasChanged = toolbar.isSaveEnable(); if (curTab.isSortTab()) { ((ADSortTab)curTabpanel).saveData(); toolbar.enableSave(false); // set explicitly toolbar.enableSaveAndCreate(false); toolbar.enableIgnore(false); - return true; + if (callback != null) + callback.onCallback(true); } else { if (onSaveEvent && curTab.getCommitWarning() != null && curTab.getCommitWarning().trim().length() > 0) { - if (!FDialog.ask(curWindowNo, this.getComponent(), "SaveChanges?", curTab.getCommitWarning())) - { - return false; - } + FDialog.ask(curWindowNo, this.getComponent(), "SaveChanges?", curTab.getCommitWarning(), new Callback() { + + @Override + public void onCallback(Boolean result) + { + if (result) + { + doSave(onSaveEvent, newRecord, wasChanged, callback); + } + } + }); + } + else + { + doSave(onSaveEvent, newRecord, wasChanged, callback); } - boolean retValue = curTab.dataSave(onSaveEvent); - - if (!retValue) - { - showLastError(); - return false; - } else if (!onSaveEvent) //need manual refresh - { - curTab.setCurrentRow(curTab.getCurrentRow()); - } - curTabpanel.dynamicDisplay(0); - curTabpanel.afterSave(onSaveEvent); - - if (wasChanged) { - if (newRecord) { - if (curTab.getRecord_ID() > 0) { - if (curTabIndex == 0) { - MRecentItem.addModifiedField(ctx, curTab.getAD_Table_ID(), - curTab.getRecord_ID(), Env.getAD_User_ID(ctx), - Env.getAD_Role_ID(ctx), curTab.getAD_Window_ID(), - curTab.getAD_Tab_ID()); - } else { - /* when a detail record is modified add header to recent items */ - GridTab mainTab = gridWindow.getTab(0); - if (mainTab != null) { - MRecentItem.addModifiedField(ctx, mainTab.getAD_Table_ID(), - mainTab.getRecord_ID(), Env.getAD_User_ID(ctx), - Env.getAD_Role_ID(ctx), mainTab.getAD_Window_ID(), - mainTab.getAD_Tab_ID()); - } - } - } - } else { - if (curTabIndex == 0) { - MRecentItem.touchUpdatedRecord(ctx, curTab.getAD_Table_ID(), - curTab.getRecord_ID(), Env.getAD_User_ID(ctx)); - } else { - GridTab mainTab = gridWindow.getTab(0); - if (mainTab != null) { - MRecentItem.touchUpdatedRecord(ctx, mainTab.getAD_Table_ID(), - mainTab.getRecord_ID(), Env.getAD_User_ID(ctx)); - } - } - } - } - - return true; } } + private void doSave(boolean onSaveEvent, boolean newRecord, + boolean wasChanged, Callback callback) { + boolean retValue = curTab.dataSave(onSaveEvent); + + if (!retValue) + { + showLastError(); + if (callback != null) + callback.onCallback(false); + } else if (!onSaveEvent) //need manual refresh + { + curTab.setCurrentRow(curTab.getCurrentRow()); + } + curTabpanel.dynamicDisplay(0); + curTabpanel.afterSave(onSaveEvent); + + if (wasChanged) { + if (newRecord) { + if (curTab.getRecord_ID() > 0) { + if (curTabIndex == 0) { + MRecentItem.addModifiedField(ctx, curTab.getAD_Table_ID(), + curTab.getRecord_ID(), Env.getAD_User_ID(ctx), + Env.getAD_Role_ID(ctx), curTab.getAD_Window_ID(), + curTab.getAD_Tab_ID()); + } else { + /* when a detail record is modified add header to recent items */ + GridTab mainTab = gridWindow.getTab(0); + if (mainTab != null) { + MRecentItem.addModifiedField(ctx, mainTab.getAD_Table_ID(), + mainTab.getRecord_ID(), Env.getAD_User_ID(ctx), + Env.getAD_Role_ID(ctx), mainTab.getAD_Window_ID(), + mainTab.getAD_Tab_ID()); + } + } + } + } else { + if (curTabIndex == 0) { + MRecentItem.touchUpdatedRecord(ctx, curTab.getAD_Table_ID(), + curTab.getRecord_ID(), Env.getAD_User_ID(ctx)); + } else { + GridTab mainTab = gridWindow.getTab(0); + if (mainTab != null) { + MRecentItem.touchUpdatedRecord(ctx, mainTab.getAD_Table_ID(), + mainTab.getRecord_ID(), Env.getAD_User_ID(ctx)); + } + } + } + } + + if (callback != null) + callback.onCallback(true); + } + private void showLastError() { String msg = CLogger.retrieveErrorString(null); if (msg != null) @@ -1708,12 +1836,18 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To */ public void onSaveCreate() { - boolean retValue = onSave(true); - if(retValue) - { - curTab.dataRefreshAll(true, true); - onNew(); - } + onSave(true, new Callback() { + + @Override + public void onCallback(Boolean result) + { + if(result) + { + curTab.dataRefreshAll(true, true); + onNew(); + } + } + }); } /** @@ -1726,13 +1860,21 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To return; } - if (FDialog.ask(curWindowNo, null, "DeleteRecord?")) - { - //error will be catch in the dataStatusChanged event - curTab.dataDelete(); - } - curTabpanel.dynamicDisplay(0); - focusToActivePanel(); + FDialog.ask(curWindowNo, null, "DeleteRecord?", new Callback() { + + @Override + public void onCallback(Boolean result) + { + if (result) + { + //error will be catch in the dataStatusChanged event + curTab.dataDelete(); + + curTabpanel.dynamicDisplay(0); + focusToActivePanel(); + } + } + }); } // Elaine 2008/12/01 @@ -1874,37 +2016,45 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To { public void onEvent(Event event) throws Exception { - if (FDialog.ask(curWindowNo, messagePanel, "DeleteSelection")) - { - logger.fine("ok"); - Set selectedValues = listbox.getSelectedItems(); - if(selectedValues != null) + FDialog.ask(curWindowNo, messagePanel, "DeleteSelection", new Callback() { + + @Override + public void onCallback(Boolean result) { - for(Iterator iter = selectedValues.iterator(); iter.hasNext();) + if (result) { - Listitem li = iter.next(); - if(li != null) - logger.fine((String) li.getValue()); + logger.fine("ok"); + Set selectedValues = listbox.getSelectedItems(); + if(selectedValues != null) + { + for(Iterator iter = selectedValues.iterator(); iter.hasNext();) + { + Listitem li = iter.next(); + if(li != null) + logger.fine((String) li.getValue()); + } + } + + int[] indices = listbox.getSelectedIndices(); + Arrays.sort(indices); + int offset = 0; + for (int i = 0; i < indices.length; i++) + { + curTab.navigate(indices[i]-offset); + if (curTab.dataDelete()) + { + offset++; + } + } + curTabpanel.dynamicDisplay(0); + + messagePanel.dispose(); + } else { + logger.fine("cancel"); } } - - int[] indices = listbox.getSelectedIndices(); - Arrays.sort(indices); - int offset = 0; - for (int i = 0; i < indices.length; i++) - { - curTab.navigate(indices[i]-offset); - if (curTab.dataDelete()) - { - offset++; - } - } - curTabpanel.dynamicDisplay(0); - - messagePanel.dispose(); - } else { - logger.fine("cancel"); - } + + }); } }); hbox.appendChild(btnOk); @@ -1933,7 +2083,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To */ public void onPrint() { //Get process defined for this tab - int AD_Process_ID = curTab.getAD_Process_ID(); + final int AD_Process_ID = curTab.getAD_Process_ID(); //log.info("ID=" + AD_Process_ID); // No report defined @@ -1944,18 +2094,23 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To return; } - if (!onSave(false)) - return; - // - int table_ID = curTab.getAD_Table_ID(); - int record_ID = curTab.getRecord_ID(); + onSave(false, new Callback() { + @Override + public void onCallback(Boolean result) { + if (result) { + // + int table_ID = curTab.getAD_Table_ID(); + int record_ID = curTab.getRecord_ID(); - ProcessModalDialog dialog = new ProcessModalDialog(this, getWindowNo(), AD_Process_ID,table_ID, record_ID, true); - if (dialog.isValid()) { - dialog.setPosition("center"); - dialog.setPage(this.getComponent().getPage()); - dialog.doHighlighted(); - } + ProcessModalDialog dialog = new ProcessModalDialog(AbstractADWindowPanel.this, getWindowNo(), AD_Process_ID,table_ID, record_ID, true); + if (dialog.isValid()) { + dialog.setPosition("center"); + dialog.setPage(AbstractADWindowPanel.this.getComponent().getPage()); + dialog.doHighlighted(); + } + } + } + }); } /** @@ -1968,9 +2123,18 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To return; } - if (!onSave(false)) - return; + onSave(false, new Callback() { + @Override + public void onCallback(Boolean result) { + if (result) { + doOnReport(); + } + } + }); + } + + private void doOnReport() { // Query MQuery query = new MQuery(curTab.getTableName()); // Link for detail records @@ -2005,7 +2169,6 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To } new WReport (curTab.getAD_Table_ID(), query, toolbar.getEvent().getTarget(), curWindowNo, curTab.getWhereExtended()); - } /** @@ -2123,8 +2286,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To logger.info(wButton.toString()); - boolean startWOasking = false; - String col = wButton.getColumnName(); + final String col = wButton.getColumnName(); // Zoom if (col.equals("Record_ID")) @@ -2140,10 +2302,29 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To if (curTab.needSave(true, false)) { - if (!onSave(false)) - return; + onSave(false, new Callback() { + @Override + public void onCallback(Boolean result) { + if (result) { + actionButton0(col, wButton); + } + } + }); } - + else + { + actionButton0(col, wButton); + } + } + + /************************************************************************** + * Start Button Process + * @param col + * @param wButton + */ + private void actionButton0 (String col, final WButtonEditor wButton) + { + boolean startWOasking = false; final int table_ID = curTab.getAD_Table_ID(); // Record_ID @@ -2181,13 +2362,19 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To if (vp.isInitOK()) // may not be allowed { vp.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); - vp.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener() { + vp.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { if (vp.needSave()) { - onSave(false); - onRefresh(false); + onSave(false, new Callback() { + + @Override + public void onCallback(Boolean result) { + onRefresh(false, false); + } + + }); } } }); @@ -2211,7 +2398,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To final int recordIdParam = record_ID; win.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); win.setPosition("center"); - win.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener() { + win.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { public void onEvent(Event event) throws Exception { if (!win.isStartProcess()) { return; @@ -2238,7 +2425,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To { final WCreateFromWindow window = (WCreateFromWindow) cf.getWindow(); window.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); - window.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener() { + window.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { if (!window.isCancel()) { @@ -2288,7 +2475,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To } // Check Post Status - Object ps = curTab.getValue("Posted"); + final Object ps = curTab.getValue("Posted"); if (ps != null && ps.equals("Y")) { @@ -2297,18 +2484,27 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To } else { - if (FDialog.ask(curWindowNo, null, "PostImmediate?")) - { - boolean force = ps != null && !ps.equals ("N"); // force when problems + final int tableIdRef = tableId; + final int recordIdRef = recordId; + FDialog.ask(curWindowNo, null, "PostImmediate?", new Callback() { - String error = AEnv.postImmediate (curWindowNo, Env.getAD_Client_ID(ctx), - tableId, recordId, force); + @Override + public void onCallback(Boolean result) + { + if (result) + { + boolean force = ps != null && !ps.equals ("N"); // force when problems - if (error != null) - statusBar.setStatusLine(error, true, true); + String error = AEnv.postImmediate (curWindowNo, Env.getAD_Client_ID(ctx), + tableIdRef, recordIdRef, force); - onRefresh(false); - } + if (error != null) + statusBar.setStatusLine(error, true, true); + + onRefresh(false, false); + } + } + }); } return; } // Posted @@ -2318,7 +2514,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To } // actionButton private void executeButtonProcess(final WButtonEditor wButton, - boolean startWOasking, int table_ID, int record_ID, + final boolean startWOasking, final int table_ID, final int record_ID, boolean isProcessMandatory) { /** * Start Process ---- @@ -2339,10 +2535,24 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To if (curTab.needSave(true, false)) { - if (!onSave(false)) - return; - } + onSave(false, new Callback() { + @Override + public void onCallback(Boolean result) { + if (result) { + executeButtonProcess0(wButton, startWOasking, table_ID, record_ID); + } + } + }); + } + else + { + executeButtonProcess0(wButton, startWOasking, table_ID, record_ID); + } + } + + private void executeButtonProcess0(final WButtonEditor wButton, + boolean startWOasking, int table_ID, int record_ID) { // call form MProcess pr = new MProcess(ctx, wButton.getProcess_ID(), null); int adFormID = pr.getAD_Form_ID(); @@ -2359,7 +2569,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To form.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED); form.setAttribute(Window.INSERT_POSITION_KEY, Window.INSERT_NEXT); SessionManager.getAppDesktop().showWindow(form); - onRefresh(false); + onRefresh(false, false); } else { @@ -2375,7 +2585,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To } else { - onRefresh(false); + onRefresh(false, false); } } } @@ -2518,7 +2728,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To public void onCustomize() { ADTabpanel tabPanel = (ADTabpanel) getADTab().getSelectedTabpanel(); Columns columns = tabPanel.getGridView().getListbox().getColumns(); - List columnList = columns.getChildren(); + List columnList = columns.getChildren(); GridField[] fields = tabPanel.getGridView().getFields(); Map columnsWidth = new HashMap(); ArrayList gridFieldIds = new ArrayList(); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java index ba944ddecc..d103e462bd 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java @@ -271,7 +271,7 @@ public abstract class InfoPanel extends Window implements EventListener, WTableM { if (isLookup()) { - setAttribute(Window.MODE_KEY, Window.MODE_MODAL); + setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); setBorder("normal"); setClosable(true); int height = SessionManager.getAppDesktop().getClientInfo().desktopHeight * 85 / 100; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java index 114ad2cb06..c85000f5f8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java @@ -61,6 +61,7 @@ import org.adempiere.webui.component.Tabpanels; import org.adempiere.webui.component.Tabs; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.WListbox; +import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.session.SessionManager; import org.compiere.minigrid.ColumnInfo; import org.compiere.minigrid.IDColumn; @@ -1119,13 +1120,20 @@ public class InfoProductPanel extends InfoPanel implements EventListener */ private void cmd_InfoPAttribute() { - InfoPAttributePanel ia = new InfoPAttributePanel(this); - m_pAttributeWhere = ia.getWhereClause(); - if (m_pAttributeWhere != null) - { - executeQuery(); - renderItems(); - } + final InfoPAttributePanel ia = new InfoPAttributePanel(this); + ia.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + m_pAttributeWhere = ia.getWhereClause(); + if (m_pAttributeWhere != null) + { + executeQuery(); + renderItems(); + } + } + }); + } // cmdInfoAttribute /** @@ -1375,12 +1383,19 @@ public class InfoProductPanel extends InfoPanel implements EventListener M_Warehouse_ID = ((Integer)warehouse.getValue()).intValue(); String title = warehouse.getLabel() + " - " + productName; - InfoPAttributeInstancePanel pai = new InfoPAttributeInstancePanel(this, title, + final InfoPAttributeInstancePanel pai = new InfoPAttributeInstancePanel(this, title, M_Warehouse_ID, 0, productInteger.intValue(), m_C_BPartner_ID); - m_M_AttributeSetInstance_ID = pai.getM_AttributeSetInstance_ID(); - m_M_Locator_ID = pai.getM_Locator_ID(); - if (m_M_AttributeSetInstance_ID != -1) - dispose(true); + pai.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + m_M_AttributeSetInstance_ID = pai.getM_AttributeSetInstance_ID(); + m_M_Locator_ID = pai.getM_Locator_ID(); + if (m_M_AttributeSetInstance_ID != -1) + dispose(true); + } + }); + return; } // diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java index c7da0f3743..26f6ecdb59 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java @@ -24,6 +24,8 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Level; +import org.adempiere.util.Callback; +import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Label; @@ -32,6 +34,7 @@ import org.adempiere.webui.component.Listbox; import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.Window; +import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.window.FDialog; import org.compiere.model.MAttachment; import org.compiere.model.MAttachmentEntry; @@ -42,9 +45,11 @@ import org.zkoss.util.media.AMedia; import org.zkoss.util.media.Media; import org.zkoss.zk.au.out.AuScript; import org.zkoss.zk.au.out.AuEcho; +import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zk.ui.util.Clients; import org.zkoss.zul.Borderlayout; import org.zkoss.zul.Center; @@ -61,7 +66,7 @@ import org.zkoss.zul.Iframe; * @author Low Heng Sin * */ -public class WAttachment extends Window implements EventListener +public class WAttachment extends Window implements EventListener { /** * generated serial version Id @@ -128,13 +133,33 @@ public class WAttachment extends Window implements EventListener public WAttachment( int WindowNo, int AD_Attachment_ID, int AD_Table_ID, int Record_ID, String trxName) + { + this(WindowNo, AD_Attachment_ID, AD_Table_ID, Record_ID, trxName, (EventListener)null); + } + + /** + * Constructor. + * loads Attachment, if ID <> 0 + * @param WindowNo window no + * @param AD_Attachment_ID attachment + * @param AD_Table_ID table + * @param Record_ID record key + * @param trxName transaction + */ + + public WAttachment( int WindowNo, int AD_Attachment_ID, + int AD_Table_ID, int Record_ID, String trxName, EventListener eventListener) { super(); log.config("ID=" + AD_Attachment_ID + ", Table=" + AD_Table_ID + ", Record=" + Record_ID); m_WindowNo = WindowNo; - + if (eventListener != null) + { + this.addEventListener(DialogEvents.ON_WINDOW_CLOSE, eventListener); + } + try { staticInit(); @@ -165,7 +190,7 @@ public class WAttachment extends Window implements EventListener } //enter modal - doModal(); + doHighlighted(); } catch (Exception e) { @@ -268,6 +293,8 @@ public class WAttachment extends Window implements EventListener confirmPanel.appendChild(bOk); text.setTooltiptext(Msg.getElement(Env.getCtx(), "TextMsg")); + + this.addEventListener(Events.ON_UPLOAD, this); } /** @@ -498,6 +525,11 @@ public class WAttachment extends Window implements EventListener else if (e.getTarget() == bRefresh) displayData(cbContent.getSelectedIndex(), true); + else if (e instanceof UploadEvent) + { + UploadEvent ue = (UploadEvent) e; + processUploadMedia(ue.getMedia()); + } } // onEvent @@ -511,10 +543,12 @@ public class WAttachment extends Window implements EventListener preview.setVisible(false); - Media media = null; - - media = Fileupload.get(true); + Media media = Fileupload.get(true); + if (AdempiereWebUI.isEventThreadEnabled()) + processUploadMedia(media); + } + private void processUploadMedia(Media media) { if (media != null) { // pdfViewer.setContent(media); @@ -554,7 +588,7 @@ public class WAttachment extends Window implements EventListener clearPreview(); m_change = true; } - } // getFileName + } private byte[] getMediaData(Media media) { byte[] bytes = null; @@ -586,8 +620,17 @@ public class WAttachment extends Window implements EventListener { log.info(""); - if (FDialog.ask(m_WindowNo, this, "AttachmentDelete?")) - m_attachment.delete(true); + FDialog.ask(m_WindowNo, this, "AttachmentDelete?", new Callback() { + + @Override + public void onCallback(Boolean result) + { + if (result) + { + m_attachment.delete(true); + } + } + }); } // deleteAttachment /** @@ -598,19 +641,26 @@ public class WAttachment extends Window implements EventListener { log.info(""); - int index = cbContent.getSelectedIndex(); + final int index = cbContent.getSelectedIndex(); String fileName = getFileName(index); if (fileName == null) return; - if (FDialog.ask(m_WindowNo, this, "AttachmentDeleteEntry?")) - { - if (m_attachment.deleteEntry(index)) - cbContent.removeItemAt(index); + FDialog.ask(m_WindowNo, this, "AttachmentDeleteEntry?", new Callback() { - m_change = true; - } + @Override + public void onCallback(Boolean result) + { + if (result) + { + if (m_attachment.deleteEntry(index)) + cbContent.removeItemAt(index); + + m_change = true; + } + } + }); } // deleteAttachment /** @@ -639,5 +689,4 @@ public class WAttachment extends Window implements EventListener } } } // saveAttachmentToFile - } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WDocActionPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WDocActionPanel.java index 0c3d113fcf..05789f1b50 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WDocActionPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WDocActionPanel.java @@ -90,9 +90,6 @@ public class WDocActionPanel extends Window implements EventListener, Dia dynInit(); init(); - this.setAttribute("mode","modal"); - - } /** @@ -300,13 +297,11 @@ public class WDocActionPanel extends Window implements EventListener, Dia m_OKpressed = true; setValue(); this.detach(); - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); } else if (confirmPanel.getButton("Cancel").equals(event.getTarget())) { m_OKpressed = false; this.detach(); - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); } } else if (Events.ON_SELECT.equals(event.getName())) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WOnlyCurrentDays.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WOnlyCurrentDays.java index d2f4187da0..e56097db13 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WOnlyCurrentDays.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WOnlyCurrentDays.java @@ -146,10 +146,4 @@ public class WOnlyCurrentDays extends Window implements EventListener, Di this.detach(); } - - @Override - public void detach() { - super.detach(); - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); - } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java index c8fe5c6a6e..9b5f02eb77 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java @@ -134,16 +134,8 @@ public class FDialog newTitle = title; } - try - { - String s = out.toString().replace("\n", "
"); - Messagebox.showDialog(s, newTitle, Messagebox.OK, Messagebox.EXCLAMATION); - } - catch (InterruptedException exception) - { - // Restore the interrupted status - Thread.currentThread().interrupt(); - } + String s = out.toString().replace("\n", "
"); + Messagebox.showDialog(s, newTitle, Messagebox.OK, Messagebox.EXCLAMATION); return; } @@ -233,16 +225,8 @@ public class FDialog out = constructMessage(adMessage, message); - try - { - String s = out.toString().replace("\n", "
"); - Messagebox.showDialog(s, AEnv.getDialogHeader(ctx, windowNo), Messagebox.OK, Messagebox.ERROR); - } - catch (InterruptedException exception) - { - // Restore the interrupted status - Thread.currentThread().interrupt(); - } + String s = out.toString().replace("\n", "
"); + Messagebox.showDialog(s, AEnv.getDialogHeader(ctx, windowNo), Messagebox.OK, Messagebox.ERROR); return; } @@ -258,6 +242,21 @@ public class FDialog * @return true, if OK */ public static boolean ask(int windowNo, Component comp, String adMessage, String msg) + { + return ask(windowNo, comp, adMessage, msg, (Callback)null); + } + + /************************************************************************** + * Ask Question with question icon and (OK) (Cancel) buttons + * + * @param WindowNo Number of Window + * @param c Container (owner) + * @param AD_Message Message to be translated + * @param msg Additional clear text message + * + * @return true, if OK + */ + public static boolean ask(int windowNo, Component comp, String adMessage, String msg, Callback callback) { StringBuffer out = new StringBuffer(); if (adMessage != null && !adMessage.equals("")) @@ -265,7 +264,7 @@ public class FDialog if (msg != null && msg.length() > 0) out.append("\n").append(msg); String s = out.toString().replace("\n", "
"); - return ask(windowNo, comp, s); + return ask(windowNo, comp, s, callback); } /************************************************************************** @@ -280,7 +279,7 @@ public class FDialog public static boolean ask(int windowNo, Component comp, String adMessage) { - return ask(windowNo, comp, adMessage, (Callback)null); + return ask(windowNo, comp, adMessage, (Callback)null); } /************************************************************************** @@ -293,23 +292,24 @@ public class FDialog * @return true, if OK */ - public static boolean ask(int windowNo, Component comp, String adMessage, Callback callback) + public static boolean ask(int windowNo, Component comp, String adMessage, final Callback callback) { - try - { - String s = Msg.getMsg(Env.getCtx(), adMessage).replace("\n", "
"); - int response = Messagebox.showDialog(s, AEnv.getDialogHeader(Env.getCtx(), windowNo), - Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, callback); + Callback msgCallback = null; + if (callback != null) + { + msgCallback = new Callback() { + @Override + public void onCallback(Integer result) { + boolean b = result != null && result.intValue() == Messagebox.OK; + callback.onCallback(b); + } + }; + } + String s = Msg.getMsg(Env.getCtx(), adMessage).replace("\n", "
"); + int response = Messagebox.showDialog(s, AEnv.getDialogHeader(Env.getCtx(), windowNo), + Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, msgCallback, (msgCallback == null)); - return (response == Messagebox.OK); - } - catch (InterruptedException ex) - { - // Restore the interrupted status - Thread.currentThread().interrupt(); - } - - return true; + return (response == Messagebox.OK); } /** @@ -356,16 +356,8 @@ public class FDialog out = constructMessage(adMessage, message); - try - { - String s = out.toString().replace("\n", "
"); - Messagebox.showDialog(s, AEnv.getDialogHeader(ctx, windowNo), Messagebox.OK, Messagebox.INFORMATION); - } - catch (InterruptedException exception) - { - // Restore the interrupted status - Thread.currentThread().interrupt(); - } + String s = out.toString().replace("\n", "
"); + Messagebox.showDialog(s, AEnv.getDialogHeader(ctx, windowNo), Messagebox.OK, Messagebox.INFORMATION); return; } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java index ffc09950af..b673e949e5 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java @@ -1326,7 +1326,6 @@ public class FindWindow extends Window implements EventListener, ValueCha super.dispose(); isvalid = false; - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); } // dispose /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java index c7420dd7cb..0e02002d30 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java @@ -21,6 +21,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; +import org.adempiere.util.Callback; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.Grid; @@ -54,6 +55,7 @@ import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; @@ -77,6 +79,7 @@ public final class WAccountDialog extends Window { private static final long serialVersionUID = 7999516267209766287L; + private Callback m_callback; /** * Constructor @@ -85,7 +88,7 @@ public final class WAccountDialog extends Window * @param C_AcctSchema_ID as */ public WAccountDialog (String title, - MAccountLookup mAccount, int C_AcctSchema_ID) + MAccountLookup mAccount, int C_AcctSchema_ID, Callback callback) { super (); this.setTitle(title); @@ -96,6 +99,7 @@ public final class WAccountDialog extends Window + ", C_ValidCombination_ID=" + mAccount.C_ValidCombination_ID); m_mAccount = mAccount; m_C_AcctSchema_ID = C_AcctSchema_ID; + m_callback = callback; m_WindowNo = SessionManager.getAppDesktop().registerWindow(this); try { @@ -242,7 +246,6 @@ public final class WAccountDialog extends Window this.setBorder("normal"); this.setClosable(false); - this.setAttribute("modal", Boolean.TRUE); this.setSizable(true); } // jbInit @@ -581,6 +584,18 @@ public final class WAccountDialog extends Window this.onClose(); } // dispose + + /* (non-Javadoc) + * @see org.adempiere.webui.component.Window#onPageDetached(org.zkoss.zk.ui.Page) + */ + @Override + public void onPageDetached(Page page) { + super.onPageDetached(page); + if (m_callback != null) { + m_callback.onCallback(getValue()); + } + } + /** * Save Selection */ diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WChat.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WChat.java index 51fc08aeb6..94e5d33926 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WChat.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WChat.java @@ -351,9 +351,4 @@ public class WChat extends Window implements EventListener, DialogEvents actionPerformed(event); } - @Override - public void detach() { - super.detach(); - Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null)); - } } // AChat diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WImageDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WImageDialog.java index 983f87f53b..547d96b3cb 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WImageDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WImageDialog.java @@ -19,6 +19,7 @@ package org.adempiere.webui.window; import java.io.InputStream; import java.util.logging.Level; +import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.ConfirmPanel; @@ -34,6 +35,7 @@ import org.zkoss.util.media.Media; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zul.Borderlayout; import org.zkoss.zul.Center; import org.zkoss.zul.North; @@ -50,7 +52,7 @@ import org.zkoss.zul.Separator; * @author Low Heng Sin * */ -public class WImageDialog extends Window implements EventListener +public class WImageDialog extends Window implements EventListener { /** * @@ -148,12 +150,20 @@ public class WImageDialog extends Window implements EventListener // fileButton.addEventListener(Events.ON_CLICK, this); confirmPanel.addActionListener(Events.ON_CLICK, this); + + addEventListener(Events.ON_UPLOAD, this); } // init public void onEvent(Event e) throws Exception { - if (e.getTarget() == fileButton) + if (e instanceof UploadEvent) + { + UploadEvent ue = (UploadEvent) e; + processUploadMedia(ue.getMedia()); + } + else if (e.getTarget() == fileButton) + { cmd_file(); - + } else if (e.getTarget().getId().equals(ConfirmPanel.A_OK)) { if (image.getContent() != null) @@ -192,10 +202,12 @@ public class WImageDialog extends Window implements EventListener private void cmd_file() { // Show File Open Dialog - Media imageFile = null; - - imageFile = Fileupload.get(); - + Media media = Fileupload.get(); + if (AdempiereWebUI.isEventThreadEnabled()) + processUploadMedia(media); + } // cmd_file + + private void processUploadMedia(Media imageFile) { if (imageFile == null) return; @@ -230,7 +242,7 @@ public class WImageDialog extends Window implements EventListener m_mImage.setBinaryData(image.getContent().getByteData()); else m_mImage.setBinaryData(null); - } // cmd_file + } /** * Get Image ID diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WMediaDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WMediaDialog.java index 6bbbb6d1f8..36c1a1e2ce 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WMediaDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WMediaDialog.java @@ -21,6 +21,7 @@ import java.sql.Clob; import java.sql.SQLException; import java.util.logging.Level; +import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Panel; @@ -33,6 +34,7 @@ import org.zkoss.util.media.Media; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zul.Borderlayout; import org.zkoss.zul.Center; import org.zkoss.zul.North; @@ -47,7 +49,7 @@ import org.zkoss.zul.Iframe; * @author Low Heng Sin * */ -public class WMediaDialog extends Window implements EventListener +public class WMediaDialog extends Window implements EventListener { /** * @@ -186,6 +188,8 @@ public class WMediaDialog extends Window implements EventListener confirmPanel.appendChild(bCancel); confirmPanel.appendChild(bOk); + + addEventListener(Events.ON_UPLOAD, this); } /** @@ -307,6 +311,11 @@ public class WMediaDialog extends Window implements EventListener { save(); } + else if (e instanceof UploadEvent) + { + UploadEvent ue = (UploadEvent) e; + processUploadMedia(ue.getMedia()); + } } // onEvent /************************************************************************** @@ -315,12 +324,12 @@ public class WMediaDialog extends Window implements EventListener private void loadFile() { - log.info(""); - - Media media = null; - - media = Fileupload.get(); - + Media media = Fileupload.get(); + if (AdempiereWebUI.isEventThreadEnabled()) + processUploadMedia(media); + } // getFileName + + private void processUploadMedia(Media media) { if (media == null) return; @@ -330,8 +339,7 @@ public class WMediaDialog extends Window implements EventListener m_change = true; m_data = media.getByteData(); displayData(); - - } // getFileName + } /** * download diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeDialog.java index 64a6a1f01c..4c4d627884 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeDialog.java @@ -39,6 +39,7 @@ import org.adempiere.webui.component.Row; import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.Window; +import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.session.SessionManager; import org.compiere.model.MAttribute; import org.compiere.model.MAttributeInstance; @@ -101,7 +102,6 @@ public class WPAttributeDialog extends Window implements EventListener, SystemID { super (); this.setTitle(Msg.translate(Env.getCtx(), "M_AttributeSetInstance_ID")); - this.setAttribute("modal", Boolean.TRUE); this.setBorder("normal"); this.setWidth("500px"); this.setHeight("600px"); @@ -627,8 +627,7 @@ public class WPAttributeDialog extends Window implements EventListener, SystemID // Select Instance if (e.getTarget() == bSelect) { - if (cmd_select()) - dispose(); + cmd_select(); } // New/Edit else if (e.getTarget() == cbNewEdit) @@ -778,7 +777,7 @@ public class WPAttributeDialog extends Window implements EventListener, SystemID * Instance Selection Button * @return true if selected */ - private boolean cmd_select() + private void cmd_select() { log.config(""); @@ -826,17 +825,22 @@ public class WPAttributeDialog extends Window implements EventListener, SystemID rs = null; pstmt = null; } // - WPAttributeInstance pai = new WPAttributeInstance(title, + final WPAttributeInstance pai = new WPAttributeInstance(title, M_Warehouse_ID, M_Locator_ID, m_M_Product_ID, m_C_BPartner_ID); - if (pai.getM_AttributeSetInstance_ID() != -1) - { - m_M_AttributeSetInstance_ID = pai.getM_AttributeSetInstance_ID(); - m_M_AttributeSetInstanceName = pai.getM_AttributeSetInstanceName(); - m_M_Locator_ID = pai.getM_Locator_ID(); - m_changed = true; - return true; - } - return false; + pai.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + if (pai.getM_AttributeSetInstance_ID() != -1) + { + m_M_AttributeSetInstance_ID = pai.getM_AttributeSetInstance_ID(); + m_M_AttributeSetInstanceName = pai.getM_AttributeSetInstanceName(); + m_M_Locator_ID = pai.getM_Locator_ID(); + m_changed = true; + dispose(); + } + } + }); } // cmd_select /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeInstance.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeInstance.java index 5e070aa9d3..db3650136d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeInstance.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WPAttributeInstance.java @@ -70,7 +70,6 @@ public class WPAttributeInstance extends Window implements EventListener { super (); this.setTitle(Msg.getMsg(Env.getCtx(), "PAttributeInstance") + title); - this.setAttribute("modal", Boolean.TRUE); this.setBorder("normal"); this.setWidth("500px"); this.setHeight("550px"); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java index 09f9729d9f..9ecb92ed71 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java @@ -1039,7 +1039,7 @@ public class ZkReportViewer extends Window implements EventListener, ITab if (!find.isValid()) return; - find.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener() { + find.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { if (!find.isCancel()) diff --git a/org.adempiere.ui.zk/WEB-INF/zk.xml b/org.adempiere.ui.zk/WEB-INF/zk.xml index d6b4b6d00d..2ba6d1227e 100644 --- a/org.adempiere.ui.zk/WEB-INF/zk.xml +++ b/org.adempiere.ui.zk/WEB-INF/zk.xml @@ -56,7 +56,7 @@ - false + true