001: /*
002: * $Id$ $Revision$ $Date$
003: *
004: * ==============================================================================
005: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
006: * use this file except in compliance with the License. You may obtain a copy of
007: * the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
013: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
014: * License for the specific language governing permissions and limitations under
015: * the License.
016: */
017: package wicket.extensions.markup.html.tree.table;
018:
019: import java.io.Serializable;
020:
021: import javax.swing.tree.TreeNode;
022:
023: import wicket.Component;
024: import wicket.MarkupContainer;
025:
026: /**
027: * Interface that represents a column in {@link TreeTable}.
028: *
029: * @author Matej Knopp
030: */
031: public interface IColumn extends Serializable {
032: /**
033: * Returns a location of this column. Location specifies how is column
034: * aligned and what is it's size.
035: * <p>
036: * In case location of a column changes, it is necessary to call the
037: * <code>invalidateAll</code> methods on the {@link TreeTable} to prevent
038: * incorrect rendering.
039: *
040: * @return The location of this column
041: */
042: ColumnLocation getLocation();
043:
044: /**
045: * Returns the span for this cell. This method is called only for cells that
046: * are aligned in the middle.
047: * <p>
048: * The returned value implicates, over how many cells the cell in this
049: * column (in row determined by node) should span. This is analogical to
050: * colspan property of html element td.
051: *
052: * @param node
053: * The tree node
054: * @return The span of the column
055: */
056: int getSpan(TreeNode node);
057:
058: /**
059: * Returns, whether the column is visible.
060: * <p>
061: * In case the visibility changes, it is necessary to call the
062: * <code>invalidateAll</code> methods on the {@link TreeTable} to prevent
063: * incorrect rendering.
064: *
065: * @return Whether the column is visible
066: */
067: boolean isVisible();
068:
069: /**
070: * This method is used to populate the cell for given node in case when
071: * {@link IColumn#newCell(TreeNode, int)} returned null.
072: *
073: * @param parent
074: * The parent to which the cell must be added. Can also be used
075: * to find the TreeTable instance (using
076: * <code>parent.findParent(TreeTable.cass)</code>)
077: * @param id
078: * The component id
079: *
080: * @param node
081: * TreeNode for the cell
082: *
083: * @param level
084: * Convenience parameter that indicates how deep the node is in
085: * hierarchy
086: * @return The populated cell component
087: */
088: Component newCell(MarkupContainer parent, String id, TreeNode node,
089: int level);
090:
091: /**
092: * Creates the {@link IRenderable} instance for given node.
093: * {@link IRenderable} can be used as lightweight alternative to regular
094: * Component for cells, that don't require user interaction (just display
095: * data).
096: * <p>
097: * If this method returns null,
098: * {@link IColumn#newCell(MarkupContainer, String, TreeNode, int)} is used
099: * to popuplate the cell.
100: *
101: * @param node
102: * TreeNode for the cell
103: *
104: * @param level
105: * Convenience parameter that indicates how deep the node is in
106: * hierarchy
107: * @return The cell renderer
108: */
109: IRenderable newCell(TreeNode node, int level);
110:
111: /**
112: * Creates the header element for this column. In most situations this will
113: * be just a simple label showing column title.
114: *
115: * @param parent
116: * The parent component
117: * @param id
118: * The component id
119: * @return The header component
120: */
121: Component newHeader(MarkupContainer parent, String id);
122:
123: /**
124: * Sets the tree table this cell belongs to. This function is guaranteed to
125: * be called before any other function. The treeTable instance is fully
126: * initialized.
127: *
128: * @param treeTable
129: * The tree table
130: */
131: void setTreeTable(TreeTable treeTable);
132: }
|