/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. 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 * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * *****************************************************************************/ package org.adempiere.webui.window; import java.io.InputStream; import java.util.logging.Level; import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.Window; import org.compiere.model.MImage; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.image.AImage; 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.zkex.zul.Borderlayout; import org.zkoss.zkex.zul.Center; import org.zkoss.zkex.zul.North; import org.zkoss.zkex.zul.South; import org.zkoss.zul.Fileupload; import org.zkoss.zul.Image; import org.zkoss.zul.Separator; /** * Base on the original Swing Image Dialog. * @author Jorg Janke * * Zk Port * @author Low Heng Sin * */ public class WImageDialog extends Window implements EventListener { /** * */ private static final long serialVersionUID = 4253571652070223072L; /** * Constructor * @param mImage */ public WImageDialog (MImage mImage) { super (); this.setTitle(Msg.translate(Env.getCtx(), "AD_Image_ID")); log.info("MImage=" + mImage); m_mImage = mImage; try { init(); } catch(Exception ex) { log.log(Level.SEVERE, "", ex); } // load data if (m_mImage == null) m_mImage = MImage.get (Env.getCtx(), 0); else { try { AImage aImage = new AImage(m_mImage.getName(), m_mImage.getData()); image.setContent(aImage); } catch (Exception e) { log.log(Level.WARNING, "load image", e); } } fileButton.setLabel(m_mImage.getName()); AEnv.showCenterScreen(this); } // WImageDialog /** Image Model */ private MImage m_mImage = null; /** Logger */ private static CLogger log = CLogger.getCLogger(WImageDialog.class); /** */ private Borderlayout mainLayout = new Borderlayout(); private Panel parameterPanel = new Panel(); private Label fileLabel = new Label(); private Button fileButton = new Button(); private Image image = new Image(); private ConfirmPanel confirmPanel = new ConfirmPanel(true,false,true,false,false,false); private boolean cancel = false; /** * Static Init * @throws Exception */ void init() throws Exception { this.setWidth("450px"); this.setHeight("550px"); this.setSizable(true); mainLayout.setParent(this); mainLayout.setWidth("100%"); mainLayout.setHeight("100%"); mainLayout.setStyle("background-color: transparent"); fileLabel.setValue(Msg.getMsg(Env.getCtx(), "SelectFile")); fileButton.setLabel("-"); North north = new North(); north.setParent(mainLayout); north.setStyle("background-color: transparent"); north.appendChild(parameterPanel); parameterPanel.appendChild(fileLabel); parameterPanel.appendChild(new Separator()); parameterPanel.appendChild((fileButton)); Center center = new Center(); center.setFlex(true); center.setParent(mainLayout); center.appendChild(image); center.setStyle("background-color: transparent"); South south = new South(); south.setStyle("background-color: transparent; border: none;"); south.setParent(mainLayout); south.appendChild(confirmPanel); // fileButton.addEventListener(Events.ON_CLICK, this); confirmPanel.addActionListener(Events.ON_CLICK, this); } // init public void onEvent(Event e) throws Exception { if (e.getTarget() == fileButton) cmd_file(); else if (e.getTarget().getId().equals(ConfirmPanel.A_OK)) { if (image.getContent() != null) { m_mImage.saveEx(); } else if (m_mImage != null && m_mImage.getAD_Image_ID() > 0) { m_mImage.deleteEx(true); m_mImage = null; } detach(); } else if (e.getTarget().getId().equals(ConfirmPanel.A_CANCEL)) { cancel = true; detach(); } else if (e.getTarget().getId().equals(ConfirmPanel.A_RESET)) { AImage img = null; image.setContent(img); } } /** * @return true if dialog cancel by user */ public boolean isCancel() { return cancel; } /** * Load file & display */ private void cmd_file() { // Show File Open Dialog Media imageFile = null; try { imageFile = Fileupload.get(); if (imageFile == null) return; } catch (InterruptedException e) { log.warning(e.getLocalizedMessage()); return; } String fileName = imageFile.getName(); // See if we can load & display it try { InputStream is = imageFile.getStreamData(); AImage aImage = new AImage(fileName, is); image.setContent(aImage); is.close(); } catch (Exception e) { log.log(Level.WARNING, "load image", e); return; } // OK fileButton.setLabel(imageFile.getName()); invalidate(); // Save info if (m_mImage == null) m_mImage = MImage.get (Env.getCtx(), 0); m_mImage.setName(fileName); m_mImage.setImageURL(fileName); if (image.getContent() != null) m_mImage.setBinaryData(image.getContent().getByteData()); else m_mImage.setBinaryData(null); } // cmd_file /** * Get Image ID * @return ID or 0 */ public int getAD_Image_ID() { if (m_mImage != null) return m_mImage.getAD_Image_ID(); return 0; } // getAD_Image_ID } // WImageDialog