Show busy dialog while button process is running.

This commit is contained in:
Heng Sin Low 2011-02-07 11:28:32 +08:00
parent 0a0f56134e
commit ac90b69d9e
3 changed files with 143 additions and 42 deletions

View File

@ -0,0 +1,50 @@
package org.adempiere.webui.apps;
import org.adempiere.webui.component.Window;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
public class BusyDialogTemplate implements Runnable, EventListener {
private static final String EVENT_NAME = "onRun";
private Runnable runnable;
private BusyDialog busyDialog;
public BusyDialogTemplate(Runnable runnable) {
this.runnable = runnable;
}
private void hideBusyDialog() {
if (busyDialog != null)
{
busyDialog.dispose();
busyDialog = null;
}
}
private void showBusyDialog() {
busyDialog = new BusyDialog();
busyDialog.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
AEnv.showCenterScreen(busyDialog);
}
public void onEvent(Event event) throws Exception {
try {
if (event.getName().equals(EVENT_NAME)) {
runnable.run();
}
} finally {
hideBusyDialog();
}
}
public void run() {
showBusyDialog();
busyDialog.addEventListener(EVENT_NAME, this);
Events.echoEvent(EVENT_NAME, busyDialog, null);
}
}

View File

@ -17,7 +17,10 @@
package org.adempiere.webui.component;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@ -32,15 +35,18 @@ import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.event.TableValueChangeEvent;
import org.adempiere.webui.event.TableValueChangeListener;
import org.compiere.minigrid.IDColumn;
import org.compiere.model.MImage;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.MSort;
import org.compiere.util.Util;
import org.zkoss.image.AImage;
import org.zkoss.zk.ui.Component;
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.Decimalbox;
import org.zkoss.zul.Image;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
@ -217,29 +223,51 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
}
else if (field instanceof Number)
{
DecimalFormat format = field instanceof BigDecimal
? DisplayType.getNumberFormat(DisplayType.Amount, AEnv.getLanguage(Env.getCtx()))
: DisplayType.getNumberFormat(DisplayType.Integer, AEnv.getLanguage(Env.getCtx()));
// set cell value to allow sorting
listcell.setValue(field.toString());
if (isCellEditable)
if (m_tableColumns != null && columnIndex < m_tableColumns.size()
&& m_tableColumns.get(columnIndex).getColumnClass().getName().equals(MImage.class.getName()) && field instanceof Integer)
{
NumberBox numberbox = new NumberBox(false);
numberbox.setFormat(format);
numberbox.setValue(field);
numberbox.setWidth("100px");
numberbox.setEnabled(true);
numberbox.setStyle("text-align:right; "
+ listcell.getStyle());
numberbox.addEventListener(Events.ON_CHANGE, this);
listcell.appendChild(numberbox);
MImage mImage = MImage.get(Env.getCtx(), (Integer) field);
AImage img = null;
byte[] data = mImage.getData();
if (data != null && data.length > 0) {
try {
img = new AImage(null, data);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Image image = new Image();
image.setContent(img);
image.setStyle("width: 48px; height: 48px;");
listcell.appendChild(image);
listcell.setStyle("text-align: center;");
}
else
{
listcell.setLabel(format.format(((Number)field).doubleValue()));
ZkCssHelper.appendStyle(listcell, "text-align:right");
DecimalFormat format = field instanceof BigDecimal
? DisplayType.getNumberFormat(DisplayType.Amount, AEnv.getLanguage(Env.getCtx()))
: DisplayType.getNumberFormat(DisplayType.Integer, AEnv.getLanguage(Env.getCtx()));
// set cell value to allow sorting
listcell.setValue(field.toString());
if (isCellEditable)
{
NumberBox numberbox = new NumberBox(false);
numberbox.setFormat(format);
numberbox.setValue(field);
numberbox.setWidth("100px");
numberbox.setEnabled(true);
numberbox.setStyle("text-align:right; "
+ listcell.getStyle());
numberbox.addEventListener(Events.ON_CHANGE, this);
listcell.appendChild(numberbox);
}
else
{
listcell.setLabel(format.format(((Number)field).doubleValue()));
ZkCssHelper.appendStyle(listcell, "text-align:right");
}
}
}
else if (field instanceof Timestamp)
@ -262,17 +290,36 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
}
else if (field instanceof String)
{
listcell.setValue(field.toString());
if (isCellEditable)
if (m_tableColumns != null && columnIndex < m_tableColumns.size() && m_tableColumns.get(columnIndex).getColumnClass().getName().equals(MImage.class.getName()))
{
Textbox textbox = new Textbox();
textbox.setValue(field.toString());
textbox.addEventListener(Events.ON_CHANGE, this);
listcell.appendChild(textbox);
try {
URL url = new URL(field.toString());
AImage aImage = new AImage(url);
Image image = new Image();
image.setContent(aImage);
image.setStyle("width: 48px; height: 48px;");
listcell.appendChild(image);
listcell.setStyle("text-align: center;");
} catch (MalformedURLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
else
{
listcell.setLabel(field.toString());
listcell.setValue(field.toString());
if (isCellEditable)
{
Textbox textbox = new Textbox();
textbox.setValue(field.toString());
textbox.addEventListener(Events.ON_CHANGE, this);
listcell.appendChild(textbox);
}
else
{
listcell.setLabel(field.toString());
}
}
}
// if ID column make it invisible
@ -386,13 +433,13 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
{
Comparator<Object> ascComparator = getColumnComparator(true, headerIndex);
Comparator<Object> dscComparator = getColumnComparator(false, headerIndex);
header = new ListHeader(headerText);
header.setSort("auto");
header.setSortAscending(ascComparator);
header.setSortDescending(dscComparator);
int width = headerText.trim().length() * 9;
if (width > 300)
width = 300;
@ -414,7 +461,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
}
else if (width > 0 && width < 100)
width = 100;
header.setWidth(width + "px");
}
m_headers.add(header);

View File

@ -33,6 +33,7 @@ import org.adempiere.webui.WArchive;
import org.adempiere.webui.WRequest;
import org.adempiere.webui.WZoomAcross;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.apps.BusyDialogTemplate;
import org.adempiere.webui.apps.ProcessModalDialog;
import org.adempiere.webui.apps.WReport;
import org.adempiere.webui.apps.form.WCreateFromFactory;
@ -2004,7 +2005,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To
if (vp.isInitOK()) // may not be allowed
{
vp.setVisible(true);
AEnv.showWindow(vp);
AEnv.showCenterScreen(vp);
}
//vp.dispose();
@ -2028,7 +2029,7 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To
}
else
{
AEnv.showWindow(win);
AEnv.showCenterScreen(win);
if (!win.isStartProcess())
return;
@ -2178,18 +2179,21 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To
* @param event
* @see ActionListener#actionPerformed(ActionEvent)
*/
public void actionPerformed(ActionEvent event)
public void actionPerformed(final ActionEvent event)
{
if (event.getSource() instanceof WButtonEditor)
{
String error = processButtonCallout((WButtonEditor)event.getSource());
if (error != null && error.trim().length() > 0)
{
statusBar.setStatusLine(error, true);
return;
Runnable runnable = new Runnable() {
public void run() {
String error = processButtonCallout((WButtonEditor)event.getSource());
if (error != null && error.trim().length() > 0)
{
statusBar.setStatusLine(error, true);
return;
}
actionButton((WButtonEditor)event.getSource());
}
actionButton((WButtonEditor)event.getSource());
}
};
BusyDialogTemplate template = new BusyDialogTemplate(runnable);
template.run();
}
/**************************************************************************