/* GNU GENERAL LICENSE Copyright (C) 2006 The Lobo Project. Copyright (C) 2014 - 2017 Lobo Evolution This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either verion 3 of the License, or (at your option) any later version. 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 License for more details. You should have received a copy of the GNU General Public along with this program. If not, see <http://www.gnu.org/licenses/>. Contact info: lobochief@users.sourceforge.net; ivan.difrancesco@yahoo.it */ package org.lobobrowser.html.layout; import org.lobobrowser.html.HtmlObject; import org.lobobrowser.html.control.RUIControl; import org.lobobrowser.html.domimpl.HTMLElementImpl; import org.lobobrowser.html.renderer.RBlockViewport; import org.lobobrowser.html.renderer.RElement; import org.lobobrowser.html.renderer.UIControl; import org.lobobrowser.html.renderer.UIControlWrapper; /** * The Class ObjectLayout. */ public class ObjectLayout extends CommonWidgetLayout { /** The try to render content. */ private boolean tryToRenderContent; /** * Instantiates a new object layout. * * @param tryToRenderContent * If the object is unknown, content is rendered as HTML. * @param usesAlignAttribute * the uses align attribute */ public ObjectLayout(boolean tryToRenderContent, boolean usesAlignAttribute) { super(ADD_INLINE, usesAlignAttribute); this.tryToRenderContent = tryToRenderContent; } /** * Must use this ThreadLocal because an ObjectLayout instance is shared * across renderers. */ private final ThreadLocal<HtmlObject> htmlObject = new ThreadLocal<HtmlObject>(); /* * (non-Javadoc) * * @see org.lobobrowser.html.layout.CommonWidgetLayout#layoutMarkup(org. * lobobrowser .html.renderer.RBlockViewport, * org.lobobrowser.html.domimpl.HTMLElementImpl) */ @Override public void layoutMarkup(RBlockViewport bodyLayout, HTMLElementImpl markupElement) { HtmlObject ho = bodyLayout.getRendererContext().getHtmlObject(markupElement); if ((ho == null) && this.tryToRenderContent) { // Don't know what to do with it - render contents. bodyLayout.layoutMarkup(markupElement); } else if (ho != null) { this.htmlObject.set(ho); super.layoutMarkup(bodyLayout, markupElement); } } /* * (non-Javadoc) * * @see org.lobobrowser.html.layout.CommonWidgetLayout#createRenderable(org. * lobobrowser .html.renderer.RBlockViewport, * org.lobobrowser.html.domimpl.HTMLElementImpl) */ @Override protected RElement createRenderable(RBlockViewport bodyLayout, HTMLElementImpl markupElement) { HtmlObject ho = this.htmlObject.get(); UIControl uiControl = new UIControlWrapper(ho); RUIControl ruiControl = new RUIControl(markupElement, uiControl, bodyLayout.getContainer(), bodyLayout.getFrameContext(), bodyLayout.getUserAgentContext()); return ruiControl; } }