diff options
Diffstat (limited to 'libjava/classpath/javax/swing/tree/AbstractLayoutCache.java')
-rw-r--r-- | libjava/classpath/javax/swing/tree/AbstractLayoutCache.java | 751 |
1 files changed, 395 insertions, 356 deletions
diff --git a/libjava/classpath/javax/swing/tree/AbstractLayoutCache.java b/libjava/classpath/javax/swing/tree/AbstractLayoutCache.java index adece10..8dbdd2f 100644 --- a/libjava/classpath/javax/swing/tree/AbstractLayoutCache.java +++ b/libjava/classpath/javax/swing/tree/AbstractLayoutCache.java @@ -38,10 +38,13 @@ exception statement from your version. */ package javax.swing.tree; +import gnu.classpath.NotImplementedException; + import java.awt.Rectangle; import java.util.Enumeration; import javax.swing.event.TreeModelEvent; +import javax.swing.tree.VariableHeightLayoutCache.NodeRecord; /** * class AbstractLayoutCache @@ -49,361 +52,397 @@ import javax.swing.event.TreeModelEvent; * @author Andrew Selkirk */ public abstract class AbstractLayoutCache - implements RowMapper + implements RowMapper { - /** - * class NodeDimensions - */ - public abstract static class NodeDimensions - { - /** - * Creates <code>NodeDimensions</code> object. - */ - public NodeDimensions() - { - // Do nothing here. - } - - /** - * getNodeDimensions - * - * @param value0 TODO - * @param value1 TODO - * @param value2 TODO - * @param value3 TODO - * @param value4 TODO - * @return Rectangle - */ - public abstract Rectangle getNodeDimensions(Object value0, int value1, - int value2, boolean value3, Rectangle value4); - } - - /** - * nodeDimensions - */ - protected NodeDimensions nodeDimensions; - - /** - * treeModel - */ - protected TreeModel treeModel; - - /** - * treeSelectionModel - */ - protected TreeSelectionModel treeSelectionModel; - - /** - * rootVisible - */ - protected boolean rootVisible; - - /** - * rowHeight - */ - protected int rowHeight; - - /** - * Constructor AbstractLayoutCache - */ - public AbstractLayoutCache() - { - // Do nothing here. - } - - /** - * setNodeDimensions - * - * @param dimensions TODO - */ - public void setNodeDimensions(NodeDimensions dimensions) - { - nodeDimensions = dimensions; - } - - /** - * getNodeDimensions - * - * @return NodeDimensions - */ - public NodeDimensions getNodeDimensions() - { - return nodeDimensions; - } - - /** - * getNodeDimensions - * - * @param value TODO - * @param row TODO - * @param depth TODO - * @param expanded TODO - * @param bounds TODO - * - * @return Rectangle - */ - protected Rectangle getNodeDimensions(Object value, int row, int depth, - boolean expanded, Rectangle bounds) - { - if (bounds == null) - return new Rectangle(); - return null; - // TODO - } - - /** - * Sets the model that provides the tree data. - * - * @param model the model - */ - public void setModel(TreeModel model) - { - treeModel = model; - } - - /** - * Returns the model that provides the tree data. - * - * @return the model - */ - public TreeModel getModel() - { - return treeModel; - } - - /** - * setRootVisible - * - * @param visible <code>true</code> if root should be visible, - * <code>false</code> otherwise - */ - public void setRootVisible(boolean visible) - { - rootVisible = visible; - } - - /** - * isRootVisible - * - * @return <code>true</code> if root is visible, - * <code>false</code> otherwise - */ - public boolean isRootVisible() - { - return rootVisible; - } - - /** - * setRowHeight - * - * @param height the row height - */ - public void setRowHeight(int height) - { - rowHeight = height; - } - - /** - * getRowHeight - * - * @return the row height - */ - public int getRowHeight() - { - return rowHeight; - } - - /** - * setSelectionModel - * - * @param model the model - */ - public void setSelectionModel(TreeSelectionModel model) - { - treeSelectionModel = model; - } - - /** - * getSelectionModel - * - * @return the model - */ - public TreeSelectionModel getSelectionModel() - { - return treeSelectionModel; - } - - /** - * getPreferredHeight - * - * @return int - */ - public int getPreferredHeight() - { - return 0; // TODO - } - - /** - * getPreferredWidth - * - * @param value0 TODO - * - * @return int - */ - public int getPreferredWidth(Rectangle value0) - { - return 0; // TODO - } - - /** - * isExpanded - * - * @param value0 TODO - * - * @return boolean - */ - public abstract boolean isExpanded(TreePath value0); - - /** - * getBounds - * - * @param value0 TODO - * @param value1 TODO - * - * @return Rectangle - */ - public abstract Rectangle getBounds(TreePath value0, Rectangle value1); - - /** - * getPathForRow - * - * @param row the row - * - * @return the tree path - */ - public abstract TreePath getPathForRow(int row); - - /** - * getRowForPath - * - * @param path the tree path - * - * @return the row - */ - public abstract int getRowForPath(TreePath path); - - /** - * getPathClosestTo - * - * @param value0 TODO - * @param value1 TODO - * - * @return the tree path - */ - public abstract TreePath getPathClosestTo(int value0, int value1); - - /** - * getVisiblePathsFrom - * - * @param path the tree path - * - * @return Enumeration - */ - public abstract Enumeration getVisiblePathsFrom(TreePath path); - - /** - * getVisibleChildCount - * - * @param path the tree path - * - * @return int - */ - public abstract int getVisibleChildCount(TreePath path); - - /** - * setExpandedState - * - * @param value0 TODO - * - * @param value1 TODO - */ - public abstract void setExpandedState(TreePath value0, boolean value1); - - /** - * getExpandedState - * - * @param path the tree path - * - * @return boolean - */ - public abstract boolean getExpandedState(TreePath path); - - /** - * getRowCount - * - * @return the number of rows - */ - public abstract int getRowCount(); - - /** - * invalidateSizes - */ - public abstract void invalidateSizes(); - - /** - * invalidatePathBounds - * - * @param path the tree path - */ - public abstract void invalidatePathBounds(TreePath path); - - /** - * treeNodesChanged - * - * @param event the event to send - */ - public abstract void treeNodesChanged(TreeModelEvent event); - - /** - * treeNodesInserted - * - * @param event the event to send - */ - public abstract void treeNodesInserted(TreeModelEvent event); - - /** - * treeNodesRemoved - * - * @param event the event to send - */ - public abstract void treeNodesRemoved(TreeModelEvent event); - - /** - * treeStructureChanged - * - * @param event the event to send - */ - public abstract void treeStructureChanged(TreeModelEvent event); - - /** - * getRowsForPaths - * - * @param paths the tree paths - * - * @return an array of rows - */ - public int[] getRowsForPaths(TreePath[] paths) - { - return null; // TODO - } - - /** - * isFixedRowHeight - * - * @return boolean - */ - protected boolean isFixedRowHeight() - { - return false; // TODO - } + /** + * class NodeDimensions + */ + public abstract static class NodeDimensions + { + /** + * Creates <code>NodeDimensions</code> object. + */ + public NodeDimensions() + { + // Do nothing here. + } + + /** + * Get the node dimensions. The NodeDimensions property must be set (unless + * the method is overridden, like if {@link FixedHeightLayoutCache}. If the + * method is not overridden and the property is not set, the InternalError is + * thrown. + * + * @param value the last node in the path + * @param row the node row + * @param depth the indentation depth + * @param expanded true if this node is expanded, false otherwise + * @param bounds the area where the tree is displayed + */ + public abstract Rectangle getNodeDimensions(Object value, int row, + int depth, boolean expanded, + Rectangle bounds); + } + + /** + * nodeDimensions + */ + protected NodeDimensions nodeDimensions; + + /** + * treeModel + */ + protected TreeModel treeModel; + + /** + * treeSelectionModel + */ + protected TreeSelectionModel treeSelectionModel; + + /** + * rootVisible + */ + protected boolean rootVisible; + + /** + * rowHeight + */ + protected int rowHeight; + + /** + * Constructor AbstractLayoutCache + */ + public AbstractLayoutCache() + { + // Do nothing here. + } + + /** + * setNodeDimensions + * + * @param dimensions TODO + */ + public void setNodeDimensions(NodeDimensions dimensions) + { + nodeDimensions = dimensions; + } + + /** + * getNodeDimensions + * + * @return NodeDimensions + */ + public NodeDimensions getNodeDimensions() + { + return nodeDimensions; + } + + /** + * Get the node dimensions. The NodeDimensions property must be set + * (unless the method is overridden, like if + * {@link FixedHeightLayoutCache}. If the method is not overridden and + * the property is not set, the InternalError is thrown. + * + * @param value the last node in the path + * @param row the node row + * @param depth the indentation depth + * @param expanded true if this node is expanded, false otherwise + * @param bounds the area where the tree is displayed + */ + protected Rectangle getNodeDimensions(Object value, int row, int depth, + boolean expanded, Rectangle bounds) + { + if (nodeDimensions == null) + throw new InternalError("The NodeDimensions are not set"); + return nodeDimensions.getNodeDimensions(value, row, depth, expanded, bounds); + } + + /** + * Sets the model that provides the tree data. + * + * @param model the model + */ + public void setModel(TreeModel model) + { + treeModel = model; + } + + /** + * Returns the model that provides the tree data. + * + * @return the model + */ + public TreeModel getModel() + { + return treeModel; + } + + /** + * setRootVisible + * + * @param visible <code>true</code> if root should be visible, + * <code>false</code> otherwise + */ + public void setRootVisible(boolean visible) + { + rootVisible = visible; + } + + /** + * isRootVisible + * + * @return <code>true</code> if root is visible, + * <code>false</code> otherwise + */ + public boolean isRootVisible() + { + return rootVisible; + } + + /** + * setRowHeight + * + * @param height the row height + */ + public void setRowHeight(int height) + { + rowHeight = height; + invalidateSizes(); + } + + /** + * getRowHeight + * + * @return the row height + */ + public int getRowHeight() + { + return rowHeight; + } + + /** + * setSelectionModel + * + * @param model the model + */ + public void setSelectionModel(TreeSelectionModel model) + { + treeSelectionModel = model; + } + + /** + * getSelectionModel + * + * @return the model + */ + public TreeSelectionModel getSelectionModel() + { + return treeSelectionModel; + } + + /** + * Get the sum of heights for all rows. This class provides a general not + * optimized implementation that is overridded in derived classes + * ({@link VariableHeightLayoutCache}, {@link FixedHeightLayoutCache}) for + * the better performance. + */ + public int getPreferredHeight() + { + int height = 0; + int n = getRowCount(); + Rectangle r = new Rectangle(); + for (int i = 0; i < n; i++) + { + TreePath path = getPathForRow(i); + height += getBounds(path, r).height; + } + return height; + } + + /** + * Get the maximal width. This class provides a general not + * optimized implementation that is overridded in derived classes + * ({@link VariableHeightLayoutCache}, {@link FixedHeightLayoutCache}) for + * the better performance. + * + * @param rect the rectangle that is used during the method work + */ + public int getPreferredWidth(Rectangle rect) + { + int maximalWidth = 0; + Rectangle r = new Rectangle(); + int n = getRowCount(); + for (int i = 0; i < n; i++) + { + TreePath path = getPathForRow(i); + r.setBounds(0,0,0,0); + r = getBounds(path, r); + if (r.x + r.width > maximalWidth) + maximalWidth = r.x + r.width; + // Invalidate the cached value as this may be the very early call + // before the heigth is properly set (the vertical coordinate may + // not be correct). + invalidatePathBounds(path); + } + return maximalWidth; + } + /** + * isExpanded + * + * @param value0 TODO + * + * @return boolean + */ + public abstract boolean isExpanded(TreePath value0); + + /** + * getBounds + * + * @param value0 TODO + * @param value1 TODO + * + * @return Rectangle + */ + public abstract Rectangle getBounds(TreePath value0, Rectangle value1); + + /** + * getPathForRow + * + * @param row the row + * + * @return the tree path + */ + public abstract TreePath getPathForRow(int row); + + /** + * getRowForPath + * + * @param path the tree path + * + * @return the row + */ + public abstract int getRowForPath(TreePath path); + + /** + * getPathClosestTo + * + * @param value0 TODO + * @param value1 TODO + * + * @return the tree path + */ + public abstract TreePath getPathClosestTo(int value0, int value1); + + /** + * getVisiblePathsFrom + * + * @param path the tree path + * + * @return Enumeration + */ + public abstract Enumeration getVisiblePathsFrom(TreePath path); + + /** + * getVisibleChildCount + * + * @param path the tree path + * + * @return int + */ + public abstract int getVisibleChildCount(TreePath path); + + /** + * setExpandedState + * + * @param value0 TODO + * + * @param value1 TODO + */ + public abstract void setExpandedState(TreePath value0, boolean value1); + + /** + * getExpandedState + * + * @param path the tree path + * + * @return boolean + */ + public abstract boolean getExpandedState(TreePath path); + + /** + * getRowCount + * + * @return the number of rows + */ + public abstract int getRowCount(); + + /** + * invalidateSizes + */ + public abstract void invalidateSizes(); + + /** + * invalidatePathBounds + * + * @param path the tree path + */ + public abstract void invalidatePathBounds(TreePath path); + + /** + * treeNodesChanged + * + * @param event the event to send + */ + public abstract void treeNodesChanged(TreeModelEvent event); + + /** + * treeNodesInserted + * + * @param event the event to send + */ + public abstract void treeNodesInserted(TreeModelEvent event); + + /** + * treeNodesRemoved + * + * @param event the event to send + */ + public abstract void treeNodesRemoved(TreeModelEvent event); + + /** + * treeStructureChanged + * + * @param event the event to send + */ + public abstract void treeStructureChanged(TreeModelEvent event); + + /** + * Get the tree row numbers for the given pathes. This method performs + * the "bulk" conversion that may be faster than mapping pathes one by + * one. To have the benefit from the bulk conversion, the method must be + * overridden in the derived classes. The default method delegates work + * to the {@link #getRowForPath(TreePath)}. + * + * @param paths the tree paths the array of the tree pathes. + * @return the array of the matching tree rows. + */ + public int[] getRowsForPaths(TreePath[] paths) + { + int[] rows = new int[paths.length]; + for (int i = 0; i < rows.length; i++) + rows[i] = getRowForPath(paths[i]); + return rows; + } + + /** + * Returns true if this layout supposes that all rows have the fixed + * height. + * + * @return boolean true if all rows in the tree must have the fixed + * height (false by default). + */ + protected boolean isFixedRowHeight() + { + return false; + } } |