/******************************************************************************
* Product: Posterita Ajax UI *
* Copyright (C) 2007 Posterita Ltd. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* Posterita Ltd., 3, Draper Avenue, Quatre Bornes, Mauritius *
* or via info@posterita.org or http://www.posterita.org/ *
*****************************************************************************/
package org.adempiere.webui.component;
import java.util.Properties;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.apps.AEnv;
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.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Image;
import org.zkoss.zul.Separator;
/**
* Messagebox : Replaces ZK's Messagebox
*
* @author Niraj Sohun
* @date Jul 31, 2007
*/
public class Messagebox extends Window implements EventListener
{
/**
* generated serial version ID
*/
private static final long serialVersionUID = -4957498533838144942L;
private static final String MESSAGE_PANEL_STYLE = "text-align:left; word-break: break-all; overflow: auto; max-height: 350pt; min-width: 230pt; max-width: 450pt;";
private String msg = new String("");
private String imgSrc = new String("");
private Text lblMsg = new Text();
private Button btnOk = new Button();
private Button btnCancel = new Button();
private Button btnYes = new Button();
private Button btnNo = new Button();
private Button btnAbort = new Button();
private Button btnRetry = new Button();
private Button btnIgnore = new Button();
private Image img = new Image();
private int returnValue;
/** A OK button. */
public static final int OK = 0x0001;
/** A Cancel button. */
public static final int CANCEL = 0x0002;
/** A Yes button. */
public static final int YES = 0x0010;
/** A No button. */
public static final int NO = 0x0020;
/** A Abort button. */
public static final int ABORT = 0x0100;
/** A Retry button. */
public static final int RETRY = 0x0200;
/** A IGNORE button. */
public static final int IGNORE = 0x0400;
/** A symbol consisting of a question mark in a circle. */
public static final String QUESTION = "~./zul/img/msgbox/question-btn.png";
/** A symbol consisting of an exclamation point in a triangle with a yellow background. */
public static final String EXCLAMATION = "~./zul/img/msgbox/warning-btn.png";
/** A symbol of a lowercase letter i in a circle. */
public static final String INFORMATION = "~./zul/img/msgbox/info-btn.png";
/** A symbol consisting of a white X in a circle with a red background. */
public static final String ERROR = "~./zul/img/msgbox/stop-btn.png";
/** Contains no symbols. */
public static final String NONE = null;
public Messagebox()
{
super();
}
private void init()
{
Properties ctx = Env.getCtx();
lblMsg.setValue(msg);
btnOk.setLabel(Util.cleanAmp(Msg.getMsg(ctx, "OK")));
btnOk.setImage("/images/Ok16.png");
btnOk.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("action-text-button", btnOk);
btnCancel.setLabel(Util.cleanAmp(Msg.getMsg(ctx, "Cancel")));
btnCancel.setImage("/images/Cancel16.png");
btnCancel.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("action-text-button", btnCancel);
btnYes.setLabel(Util.cleanAmp(Msg.getMsg(ctx, "Yes")));
btnYes.setImage("/images/Ok16.png");
btnYes.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("action-text-button", btnYes);
btnNo.setLabel(Util.cleanAmp(Msg.getMsg(ctx, "No")));
btnNo.setImage("/images/Cancel16.png");
btnNo.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("action-text-button", btnNo);
btnAbort.setLabel("Abort");
btnAbort.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("action-text-button", btnAbort);
btnRetry.setLabel("Retry");
btnRetry.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("action-text-button", btnRetry);
btnIgnore.setLabel("Ignore");
btnIgnore.setImage("/images/Ignore16.png");
btnIgnore.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("action-text-button", btnIgnore);
Panel pnlMessage = new Panel();
pnlMessage.setStyle(MESSAGE_PANEL_STYLE);
pnlMessage.appendChild(lblMsg);
Hbox pnlImage = new Hbox();
img.setSrc(imgSrc);
pnlImage.setWidth("72px");
pnlImage.setAlign("center");
pnlImage.setPack("center");
pnlImage.appendChild(img);
Hbox north = new Hbox();
north.setAlign("center");
north.setStyle("margin: 20pt 10pt 20pt 10pt;"); //trbl
this.appendChild(north);
north.appendChild(pnlImage);
north.appendChild(pnlMessage);
Hbox pnlButtons = new Hbox();
pnlButtons.setHeight("52px");
pnlButtons.setAlign("center");
pnlButtons.setPack("end");
pnlButtons.appendChild(btnOk);
pnlButtons.appendChild(btnCancel);
pnlButtons.appendChild(btnYes);
pnlButtons.appendChild(btnNo);
pnlButtons.appendChild(btnAbort);
pnlButtons.appendChild(btnRetry);
pnlButtons.appendChild(btnIgnore);
Separator separator = new Separator();
separator.setWidth("100%");
separator.setBar(true);
this.appendChild(separator);
Hbox south = new Hbox();
south.setPack("end");
south.setWidth("100%");
this.appendChild(south);
south.appendChild(pnlButtons);
this.setBorder("normal");
this.setContentStyle("background-color:#ffffff;");
this.setPosition("left, top");
}
public int show(String message, String title, int buttons, String icon)
{
this.msg = message;
this.imgSrc = icon;
btnOk.setVisible(false);
btnCancel.setVisible(false);
btnYes.setVisible(false);
btnNo.setVisible(false);
btnRetry.setVisible(false);
btnAbort.setVisible(false);
btnIgnore.setVisible(false);
if ((buttons & OK) != 0)
btnOk.setVisible(true);
if ((buttons & CANCEL) != 0)
btnCancel.setVisible(true);
if ((buttons & YES) != 0)
btnYes.setVisible(true);
if ((buttons & NO) != 0)
btnNo.setVisible(true);
if ((buttons & RETRY) != 0)
btnRetry.setVisible(true);
if ((buttons & ABORT) != 0)
btnAbort.setVisible(true);
if ((buttons & IGNORE) != 0)
btnIgnore.setVisible(true);
init();
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.setSizable(true);
this.setVisible(true);
AEnv.showCenterScreen(this);
return returnValue;
}
public static int showDialog(String message, String title, int buttons, String icon) throws InterruptedException
{
Messagebox msg = new Messagebox();
return msg.show(message, title, buttons, icon);
}
public void onEvent(Event event) throws Exception
{
if (event == null)
return;
if (event.getTarget() == btnOk)
{
returnValue = OK;
}
else if (event.getTarget() == btnCancel)
{
returnValue = CANCEL;
}
else if (event.getTarget() == btnYes)
{
returnValue = YES;
}
else if (event.getTarget() == btnNo)
{
returnValue = NO;
}
else if (event.getTarget() == btnAbort)
{
returnValue = ABORT;
}
else if (event.getTarget() == btnRetry)
{
returnValue = RETRY;
}
else if (event.getTarget() == btnIgnore)
{
returnValue = IGNORE;
}
this.detach();
}
}