/* Macro.java Purpose: Description: History: Wed Feb 21 23:05:29 2007, Created by tomyeh Copyright (C) 2007 Potix Corporation. All Rights Reserved. {{IS_RIGHT This program is distributed under LGPL Version 2.1 in the hope that it will be useful, but WITHOUT ANY WARRANTY. }}IS_RIGHT */ package org.zkoss.zk.ui.ext; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.IdSpace; /** * Implemented with {@link org.zkoss.zk.ui.Component} to represent * a macro component. * * @author tomyeh */ public interface Macro extends AfterCompose, IdSpace, DynamicPropertied { /** Sets the macro URI. * It affects only this component. * * <p>Note: this method calls {@link #recreate} automatically * if uri is changed. * * @param uri the URI of this macro. If null, the default is used. */ public void setMacroURI(String uri); /** Returns the macro URI. * <p>If {@link #setMacroURI} wasn't called, it returns the URI * defined in the macro definition. * @since 3.6.0 */ public String getMacroURI(); /** Detaches all child components and then recreate them. * * <p>It is used if you have assigned new values to dynamic properties * and want to re-create child components to reflect the new values. * Note: it is convenient but the performance is better if you can manipulate * only the child components that need to be changed. * Refer to <a href="http://books.zkoss.org/wiki/ZK_Developer%27s_Reference/UI_Composing/Macro_Component">ZK Developer's Reference</a> for details. */ public void recreate(); /** Returns whether this is an inline macro. * The only way to create an inline macro is by use of * {@link org.zkoss.zk.ui.metainfo.ComponentDefinition#newInstance}. * * @since 2.4.0 */ public boolean isInline(); /** Sets the parent to the given one and insert the children of * the inline macro right before the given sibling (beforeSibling). * * <p>This method is used only internally. * * <p>Notice that when {@link org.zkoss.zk.ui.AbstractComponent#insertBefore} * is called to insert an inline macro ({@link #isInline}), * the invocation will be forwarded to this method. * It is called only {@link #isInline} is true. * * @param parent the parent * @param beforeSibling a child of the parent that the macro component * will be inserted before * @exception IllegalStateException if {@link #isInline} is false. * @return if it has been added successfully * @since 5.0.4 */ public boolean setInlineParent(Component parent, Component beforeSibling); }