/****************************************************************************** * Product: BrERP Business Solution (http://brerp.org) * * * * Copyright (C) 2014 devCoffee Sistemas de Gestão Integrada Ltda. * * * * 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. * *****************************************************************************/ package org.brerp.ui.zk.editor; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.adwindow.ADWindow; import org.adempiere.webui.adwindow.AbstractADWindowContent; import org.adempiere.webui.editor.WEditor; import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.window.WTextEditorDialog; import org.compiere.model.GridField; import org.compiere.model.GridTab; import org.compiere.util.CLogger; 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.Div; import org.zkoss.zul.Html; import org.zkoss.zul.Vlayout; /** * HTML Editor *

Simple implementation of an editor to show HTML content

* * @author muriloht (muriloht@devcoffee.com.br, http://www.devcoffee.com.br) * @version $Id: WHTMLEditor.java, v1.0 11/11/2014 20:25:06, muriloht Exp $ */ public class WHTMLEditor extends WEditor { private String oldValue; private AbstractADWindowContent adwindowContent; /** HTML Model */ private Html box = null; private boolean m_mandatory; private boolean readwrite; /** Logger */ private static CLogger log = CLogger.getCLogger(WHTMLEditor.class); public WHTMLEditor(GridTab gridTab, GridField gridField) { super(new Vlayout(), gridField); init(); } @Override public Vlayout getComponent() { return (Vlayout) component; } private void init() { log.info("Initializing component"); if (gridField != null) { Vlayout layout = (Vlayout) this.getComponent(); layout.setHeight("100px"); layout.setWidth("100%"); Div div = new Div(); div.setHeight("100px"); div.setStyle("overflow: auto"); div.setParent(layout); box = new Html(); box.setParent(div); box.addEventListener(Events.ON_CLICK, this); } } @Override public String getDisplay() { return box.getContent(); } @Override public Object getValue() { if (box == null || box.getContent().isEmpty()) return null; return box.getContent(); } @Override public boolean isMandatory() { return m_mandatory; } @Override public void setMandatory(boolean mandatory) { super.setMandatory(mandatory); m_mandatory = mandatory; } @Override public boolean isReadWrite() { return readwrite; } @Override public void setReadWrite(boolean readWrite) { this.readwrite = readWrite; if (readWrite) getComponent().setStyle("cursor: pointer; border: 1px solid;"); else getComponent().setStyle("cursor: default; border: none;"); } @Override public void setValue(Object value) { if (value != null) { box.setContent(value.toString()); } else { box.setContent(""); } oldValue = box.getContent(); } @Override public String getDisplayTextForGridView(Object value) { if (value == null) { return ""; } else { return (String)value; } } public void onEvent(Event event) throws Exception { if (Events.ON_CLICK.equals(event.getName()) && readwrite) { adwindowContent = findADWindowContent(); final WTextEditorDialog dialog = new WTextEditorDialog(gridField.getVO().Header, getDisplay(), isReadWrite(), gridField.getFieldLength(), true); dialog.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { if (adwindowContent != null) { adwindowContent.hideBusyMask(); } if (!dialog.isCancelled()) { box.setContent(dialog.getText()); String newText = box.getContent(); ValueChangeEvent changeEvent = new ValueChangeEvent(WHTMLEditor.this, WHTMLEditor.this.getColumnName(), oldValue, newText); WHTMLEditor.super.fireValueChange(changeEvent); oldValue = newText; } } }); if (adwindowContent != null) { adwindowContent.getComponent().getParent().appendChild(dialog); adwindowContent.showBusyMask(dialog); LayoutUtils.openOverlappedWindow(adwindowContent.getComponent().getParent(), dialog, "middle_center"); } else { SessionManager.getAppDesktop().showWindow(dialog); } dialog.focus(); } } private AbstractADWindowContent findADWindowContent() { Component parent = getComponent().getParent(); while(parent != null) { if (parent.getAttribute(ADWindow.AD_WINDOW_ATTRIBUTE_KEY) != null) { ADWindow adwindow = (ADWindow) parent.getAttribute(ADWindow.AD_WINDOW_ATTRIBUTE_KEY); return adwindow.getADWindowContent(); } parent = parent.getParent(); } return null; } }