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