/* RowRendererExt.java Purpose: Description: History: Thu Mar 8 10:57:52 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.zul; import org.zkoss.zk.ui.Component; /** * Provides additional control to {@link RowRenderer}. * * @author tomyeh */ public interface RowRendererExt { /** Creates an instance of {@link Row} that will be attached to grid. * The created component will be passed to {@link RowRenderer#render} * to append the required information to show a row of the data. * * <p>Note: remember to invoke {@link Row#applyProperties} to initialize * the properties, defined in the component definition, properly. * * <p>If null is returned, the default row is created as follow. <pre><code> final Row row = new Row(); row.applyProperties(); return row; </code></pre> * * <p>Note: DO NOT call {@link Row#setParent}. * * @return the row if you'd like to create it differently, or null * if you want {@link Grid} to create it for you */ public Row newRow(Grid grid); /** Create a component that will be attached to the <b>unloaded</b> row. * By unloaded row we mean the row that is not loaded with the data * retreived from the model. That is, {@link RowRenderer#render} * is not called yet. * * <p>Notice that this callback shall generate an empty cell, * rather than showing the data retrieved from the model. * The showing of the data from model shall be done * in {@link RowRenderer#render}. * * <p>If null is returned, the default cell is created as follows. <pre><code> final Label cell = new Label(); cell.applyProperties(); return cell; </code></pre> * * <p>Note: remember to invoke {@link Component#applyProperties} to * initialize the properties, defined in the component definition, properly, * if you create an instance instead of returning null. * * <p>Note: DO NOT call {@link Row#setParent}. * * <p>Note: DO NOT call {@link Component#setParent}. * Don't create cells for other columns. * * @param row the row. It is the same as that is returned * by {@link #newRow} * @return the cell if you'd like to create it differently, or null * if you want {@link Grid} to create it for you */ public Component newCell(Row row); /** Returned by {@link #getControls} to indicate * that the list cells added by {@link #newCell} must be * detached before calling {@link RowRenderer#render}. * * <p>Default: true.<br/> * If this interface is not specified, this flag is assumed * to be specified. * * <p>If you don't specify this flag, the implementation of * {@link RowRenderer#render} must be aware of the existence of * the first cell (of the passed row). */ public static final int DETACH_ON_RENDER = 0x0001; /** Returns how a grid shall render the live data. * * <p>Note: if this interface is not implemented, {@link #DETACH_ON_RENDER} * is assumed. * * @return a combination of {@link #DETACH_ON_RENDER} or 0 * to indicate how to render the live data. */ public int getControls(); }