/****************************************************************************** * 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.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.adempiere.webui.LayoutUtils; import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zul.Hbox; import org.zkoss.zul.Messagebox; /** * Application Confirm Panel * Web UI port of the rich client's ConfirmPanel by Jorg Janke * @author Sendy Yagambrum * @date July 25, 2007 **/ public final class ConfirmPanel extends Hbox { /** * */ private static final long serialVersionUID = -6050634074454659578L; /** Action String OK. */ public static final String A_OK = "Ok"; /** Action String Cancel. */ public static final String A_CANCEL = "Cancel"; /** Action String Refresh. */ public static final String A_REFRESH = "Refresh"; /** Action String Reset. */ public static final String A_RESET = "Reset"; /** Action String Customize. */ public static final String A_CUSTOMIZE = "Customize"; /** Action String History. */ public static final String A_HISTORY = "History"; /** Action String Zoom. */ public static final String A_ZOOM = "Zoom"; /** Action String Process. */ public static final String A_PROCESS = "Process"; /** Action String Print. */ public static final String A_PRINT = "Print"; /** Action String Export. */ public static final String A_EXPORT = "Export"; /** Action String Help. */ public static final String A_HELP = "Help"; /** Action String Delete. */ public static final String A_DELETE = "Delete"; /** Action String PAttribute. */ public static final String A_PATTRIBUTE = "PAttribute"; /** Action String New. */ public static final String A_NEW = "New"; private boolean m_withText = false; private Map<String, Button> buttonMap = new HashMap<String, Button>(); /** * Creates a button of the specified id * * @param id button id * @return button * * <p>The string can be any of the following and the corresponding button will be created: </p> * <dl> * <dt>Ok</dt> <dd>Ok button</dd> * <dt>Cancel</dt> <dd>Cancel button</dd> * <dt>Refresh</dt> <dd>Refresh button</dd> * <dt>Reset</dt> <dd>Reset button</dd> * <dt>History</dt> <dd>History button</dd> * <dt>Process</dt> <dd>Process button</dd> * <dt>New</dt> <dd>New button</dd> * <dt>Customize</dt> <dd>Customize button</dd> * <dt>Delete</dt> <dd>Delete button</dd> * <dt>Save</dt> <dd>Save button</dd> * <dt>Zoom</dt> <dd>Zoom button</dd> * <dt>Help</dt> <dd>Help button</dd> * </dl> * */ public Button createButton(String name) { Button button = new Button(); button.setName("btn"+name); button.setId(name); String text = Msg.translate(Env.getCtx(), name); if (!name.equals(text)) text = text.replaceAll("[&]", ""); else text = null; if (m_withText && text != null) { button.setImage("images/"+name+"16.png"); button.setLabel(text); LayoutUtils.addSclass("action-text-button", button); } else { button.setImage("images/"+name+"24.png"); if (text != null) button.setTooltiptext(text); LayoutUtils.addSclass("action-button", button); } buttonMap.put(name, button); return button; } /** * create confirm panel with multiple options * @param withCancelButton with cancel * @param withRefreshButton with refresh * @param withResetButton with reset * @param withCustomizeButton with customize * @param withHistoryButton with history * @param withZoomButton with zoom */ public ConfirmPanel(boolean withCancelButton, boolean withRefreshButton, boolean withResetButton, boolean withCustomizeButton, boolean withHistoryButton, boolean withZoomButton) { this(withCancelButton, withRefreshButton, withResetButton, withCustomizeButton, withHistoryButton, withZoomButton, false); } /** * create confirm panel with multiple options * @param withCancelButton with cancel * @param withRefreshButton with refresh * @param withResetButton with reset * @param withCustomizeButton with customize * @param withHistoryButton with history * @param withZoomButton with zoom */ public ConfirmPanel(boolean withCancelButton, boolean withRefreshButton, boolean withResetButton, boolean withCustomizeButton, boolean withHistoryButton, boolean withZoomButton, boolean withText) { m_withText = withText; init(); setVisible(A_CANCEL, withCancelButton); addComponentsRight(createButton(A_OK)); if (withCancelButton) addComponentsRight(createButton(A_CANCEL)); if (withRefreshButton) { addComponentsLeft(createButton(A_REFRESH)); } if (withResetButton) { addComponentsLeft(createButton(A_RESET)); } if (withCustomizeButton) { addComponentsLeft(createButton(A_CUSTOMIZE)); } if (withHistoryButton) { addComponentsLeft(createButton(A_HISTORY)); } if (withZoomButton) { addComponentsLeft(createButton(A_ZOOM)); } } /** * Create confirm panel with Ok button only */ public ConfirmPanel() { this(false,false,false,false,false,false); } /** * Create confirm panel with Ok and Cancel button * @param withCancel with cancel * */ public ConfirmPanel(boolean withCancel) { this(withCancel,false,false,false,false,false); } // private Hbox hboxBtnLeft; private Hbox hboxBtnRight; // private Panel pnlBtnRight; private Panel pnlBtnLeft; /** * initialise components */ private void init() { pnlBtnLeft = new Panel(); pnlBtnLeft.setAlign("left"); pnlBtnRight = new Panel(); pnlBtnRight.setAlign("right"); hboxBtnRight = new Hbox(); hboxBtnRight.appendChild(pnlBtnRight); hboxBtnRight.setWidth("100%"); hboxBtnRight.setStyle("text-align:right"); hboxBtnLeft = new Hbox(); hboxBtnLeft.appendChild(pnlBtnLeft); hboxBtnLeft.setWidth("100%"); hboxBtnLeft.setStyle("text-align:left"); this.appendChild(hboxBtnLeft); this.appendChild(hboxBtnRight); this.setWidth("100%"); } /** * add button to the left side of the confirm panel * @param button button */ public void addComponentsLeft(Button button) { if (!buttonMap.containsKey(button.getId())) buttonMap.put(button.getId(), button); pnlBtnLeft.appendChild(button); } /** * add button to the right side of the confirm panel * @param button button */ public void addComponentsRight(Button button) { if (!buttonMap.containsKey(button.getId())) buttonMap.put(button.getId(), button); pnlBtnRight.appendChild(button); } /** * return button of the specified id * @param id button id * @return button or null if no button is found * <p> The button id can be any of the following * <dl> * <dt>Ok</dt> <dd>Ok button</dd> * <dt>Cancel</dt> <dd>Cancel button</dd> * <dt>Refresh</dt> <dd>Refresh button</dd> * <dt>Reset</dt> <dd>Reset button</dd> * <dt>History</dt> <dd>History button</dd> * <dt>Process</dt> <dd>Process button</dd> * <dt>New</dt> <dd>New button</dd> * <dt>Customize</dt> <dd>Customize button</dd> * <dt>Delete</dt> <dd>Delete button</dd> * <dt>Save</dt> <dd>Save button</dd> * <dt>Zoom</dt> <dd>Zoom button</dd> * <dt>Help</dt> <dd>Help button</dd> * </dl> */ public Button getButton(String id) { return buttonMap.get(id); } /** * sets the visibility of the specified button * @param btnName button name * @param visible visibility * <p> The button name can be any of the following * <dl> * <dt>Ok</dt> <dd>Ok button</dd> * <dt>Cancel</dt> <dd>Cancel button</dd> * <dt>Refresh</dt> <dd>Refresh button</dd> * <dt>Reset</dt> <dd>Reset button</dd> * <dt>History</dt> <dd>History button</dd> * <dt>Process</dt> <dd>Process button</dd> * <dt>New</dt> <dd>New button</dd> * <dt>Customize</dt> <dd>Customize button</dd> * <dt>Delete</dt> <dd>Delete button</dd> * <dt>Save</dt> <dd>Save button</dd> * <dt>Zoom</dt> <dd>Zoom button</dd> * <dt>Help</dt> <dd>Help button</dd> * </dl> */ public void setVisible(String id, boolean visible) { Button btn = getButton(id); if (btn != null) { btn.setVisible(visible); } } /** * returns whether the specified button is visible or not * @param btnName * @return visibility of the button * <p> The button name can be any of the following * <dl> * <dt>Ok</dt> <dd>Ok button</dd> * <dt>Cancel</dt> <dd>Cancel button</dd> * <dt>Refresh</dt> <dd>Refresh button</dd> * <dt>Reset</dt> <dd>Reset button</dd> * <dt>History</dt> <dd>History button</dd> * <dt>Process</dt> <dd>Process button</dd> * <dt>New</dt> <dd>New button</dd> * <dt>Customize</dt> <dd>Customize button</dd> * <dt>Delete</dt> <dd>Delete button</dd> * <dt>Save</dt> <dd>Save button</dd> * <dt>Zoom</dt> <dd>Zoom button</dd> * <dt>Help</dt> <dd>Help button</dd> * </dl> */ public boolean isVisible(String btnName) { Button btn = getButton(btnName); if (btn != null) { return btn.isVisible(); } else { try { Messagebox.show("No "+btnName+" button available"); } catch(Exception e) { e.printStackTrace(); } return false; } } /** * enable specific button * @param id button id * @param enabled enabled * * <p> The button id can be any of the following * <dl> * <dt>Ok</dt> <dd>Ok button</dd> * <dt>Cancel</dt> <dd>Cancel button</dd> * <dt>Refresh</dt> <dd>Refresh button</dd> * <dt>Reset</dt> <dd>Reset button</dd> * <dt>History</dt> <dd>History button</dd> * <dt>Process</dt> <dd>Process button</dd> * <dt>New</dt> <dd>New button</dd> * <dt>Customize</dt> <dd>Customize button</dd> * <dt>Delete</dt> <dd>Delete button</dd> * <dt>Save</dt> <dd>Save button</dd> * <dt>Zoom</dt> <dd>Zoom button</dd> * <dt>Help</dt> <dd>Help button</dd> * </dl> */ public void setEnabled(String id, boolean enabled) { Button button = getButton(id); if (button != null) { button.setEnabled(enabled); } } /** * enable all components * @param enabled enabled */ public void setEnabledAll(boolean enabled) { List list1 = pnlBtnLeft.getChildren(); List list2 = pnlBtnRight.getChildren(); Iterator iter1 = list1.iterator(); Iterator iter2 = list2.iterator(); while (iter1.hasNext()) { Button button = (Button)iter1.next(); button.setEnabled(enabled); } while (iter2.hasNext()) { Button button = (Button)iter2.next(); button.setEnabled(enabled); } } /** * add action listener on the existing buttons * @param event event * @param listener listener */ public void addActionListener(String event, EventListener listener) { List list1 = pnlBtnLeft.getChildren(); List list2 = pnlBtnRight.getChildren(); Iterator iter1 = list1.iterator(); Iterator iter2 = list2.iterator(); while (iter1.hasNext()) { Button button = (Button)iter1.next(); button.addEventListener(event, listener); } while (iter2.hasNext()) { Button button = (Button)iter2.next(); button.addEventListener(event, listener); } } /** * added to ease porting of swing form * @param listener */ public void addActionListener(EventListener listener) { addActionListener(Events.ON_CLICK, listener); } /** * alias for addComponentsLeft for ease of porting swing form * @param selectAllButton */ public void addButton(Button button) { addComponentsLeft(button); } /** * alias for getButton("Ok"), to ease porting of swing form * @return Button */ public Button getOKButton() { return getButton(A_OK); } } // ConfirmPanel