package prefuse.visual; import java.awt.BasicStroke; import java.awt.Font; import java.awt.geom.Rectangle2D; import prefuse.Visualization; import prefuse.data.CascadedTable; import prefuse.data.Schema; import prefuse.data.Table; import prefuse.data.event.EventConstants; import prefuse.data.expression.Predicate; import prefuse.visual.tuple.TableVisualItem; /** * A visual abstraction of a Table data structure. Serves as a backing table * for VisualItem tuples. VisualTable dervies from CascadedTable, * so can inherit another table's values. Commonly, a VisualTable is used to * take a raw data table and "strap" visual properties on top of it. * VisualTables should not be created directly, they are created automatically * by adding data to a Visualization, for example by using the * {@link Visualization#addTable(String, Table)} method. * * @author <a href="http://jheer.org">jeffrey heer</a> */ public class VisualTable extends CascadedTable implements VisualTupleSet { private Visualization m_vis; private String m_group; // ------------------------------------------------------------------------ // Constructors /** * Create a new VisualTable. * @param parent the parent table whose values this table should inherit * @param vis the Visualization associated with this table * @param group the data group of this table */ public VisualTable(Table parent, Visualization vis, String group) { this(parent, vis, group, null, VisualItem.SCHEMA); } /** * Create a new VisualTable. * @param parent the parent table whose values this table should inherit * @param vis the Visualization associated with this table * @param group the data group of this table * @param rowFilter a predicate determing which rows of the parent table * should be inherited by this table and which should be filtered out */ public VisualTable(Table parent, Visualization vis, String group, Predicate rowFilter) { this(parent, vis, group, rowFilter, VisualItem.SCHEMA); } /** * Create a new VisualTable. * @param parent the parent table whose values this table should inherit * @param vis the Visualization associated with this table * @param group the data group of this table * @param rowFilter a predicate determing which rows of the parent table * should be inherited by this table and which should be filtered out * @param schema the data schema to use for the table's local columns */ public VisualTable(Table parent, Visualization vis, String group, Predicate rowFilter, Schema schema) { super(parent, rowFilter, null, TableVisualItem.class); init(vis, group, schema); } // -- non-cascaded visual table ------------------------------------------- /** * Create a new VisualTable without a parent table. * @param vis the Visualization associated with this table * @param group the data group of this table */ public VisualTable(Visualization vis, String group) { super(TableVisualItem.class); init(vis, group, VisualItem.SCHEMA); } /** * Create a new VisualTable without a parent table. * @param vis the Visualization associated with this table * @param group the data group of this table * @param schema the data schema to use for the table's local columns */ public VisualTable(Visualization vis, String group, Schema schema) { super(TableVisualItem.class); init(vis, group, schema); } /** * Create a new VisualTable without a parent table. * @param vis the Visualization associated with this table * @param group the data group of this table * @param schema the data schema to use for the table's local columns * @param tupleType the type of Tuple instances to use */ public VisualTable(Visualization vis, String group, Schema schema, Class tupleType) { super(tupleType); init(vis, group, schema); } /** * Initialize this VisualTable * @param vis the Visualization associated with this table * @param group the data group of this table * @param schema the data schema to use for the table's local columns */ protected void init(Visualization vis, String group, Schema schema) { setVisualization(vis); setGroup(group); addColumns(schema); if ( canGetBoolean(VisualItem.VISIBLE) ) index(VisualItem.VISIBLE); if ( canGetBoolean(VisualItem.STARTVISIBLE) ) index(VisualItem.STARTVISIBLE); if ( canGetBoolean(VisualItem.VALIDATED) ) index(VisualItem.VALIDATED); } // ------------------------------------------------------------------------ /** * Relay table events. Ensures that updated visual items are invalidated * and that damage reports are issued for deleted items. */ protected void fireTableEvent(int row0, int row1, int col, int type) { // table attributes changed, so we invalidate the bounds if ( type==EventConstants.UPDATE ) { if ( col != VisualItem.IDX_VALIDATED ) { for ( int r=row0; r<=row1; ++r ) setValidated(r,false); } else { // change in validated status for ( int r=row0; r<=row1; ++r ) { if ( !isValidated(r) ) { // retrieve the old bounds to report damage m_vis.damageReport(getItem(r), getBounds(r)); } } } } else if ( type==EventConstants.DELETE && col==EventConstants.ALL_COLUMNS) { for ( int r=row0; r<=row1; ++r ) { if ( isVisible(r) && isValidated(r) ) { VisualItem item = (VisualItem)getTuple(r); m_vis.damageReport(item, getBounds(r)); } } } // now propagate the change event super.fireTableEvent(row0, row1, col, type); } // ------------------------------------------------------------------------ // VisualItemTable Methods /** * @see prefuse.visual.VisualTupleSet#getVisualization() */ public Visualization getVisualization() { return m_vis; } /** * Set the visualization associated with this VisualTable * @param vis the visualization to set */ public void setVisualization(Visualization vis) { m_vis = vis; } /** * Get the visualization data group name for this table * @return the data group name */ public String getGroup() { return m_group; } /** * Set the visualization data group name for this table * @return the data group name to use */ public void setGroup(String group) { m_group = group; } /** * Get the VisualItem for the given table row. * @param row a table row index * @return the VisualItem for the given table row */ public VisualItem getItem(int row) { return (VisualItem)getTuple(row); } /** * Add a new row to the table and return the VisualItem for that row. Only * allowed if there is no parent table, otherwise an exception will result. * @return the VisualItem for the newly added table row. */ public VisualItem addItem() { return getItem(addRow()); } // ------------------------------------------------------------------------ // VisualItem Data Access /** * Indicates if the given row is currently validated. If not, * validateBounds() must be run to update the bounds to a current value. * @param row the table row * @return true if validated, false otherwise */ public boolean isValidated(int row) { return getBoolean(row, VisualItem.VALIDATED); } /** * Set the given row's validated flag. This is for internal use by prefuse * and, in general, should not be called by application code. * @param row the table row to set * @param value the value of the validated flag to set. */ public void setValidated(int row, boolean value) { setBoolean(row, VisualItem.VALIDATED, value); } /** * Indicates if the given row is currently set to be visible. Items with * the visible flag set false will not be drawn by a display. Invisible * items are also by necessity not interactive, regardless of the value of * the interactive flag. * @param row the table row * @return true if visible, false if invisible */ public boolean isVisible(int row) { return getBoolean(row, VisualItem.VISIBLE); } /** * Set the given row's visibility. * @param row the table row to set * @param value true to make the item visible, false otherwise. */ public void setVisible(int row, boolean value) { setBoolean(row, VisualItem.VISIBLE, value); } /** * Indicates if the start visible flag is set to true. This is the * visibility value consulted for the staring value of the visibility * field at the beginning of an animated transition. * @param row the table row * @return true if this item starts out visible, false otherwise. */ public boolean isStartVisible(int row) { return getBoolean(row, VisualItem.STARTVISIBLE); } /** * Set the start visible flag. * @param row the table row to set * @param value true to set the start visible flag, false otherwise */ public void setStartVisible(int row, boolean value) { setBoolean(row, VisualItem.STARTVISIBLE, value); } /** * Indictes if the end visible flag is set to true. This is the * visibility value consulted for the ending value of the visibility * field at the end of an animated transition. * @param row the table row * @return true if this items ends visible, false otherwise. */ public boolean isEndVisible(int row) { return getBoolean(row, VisualItem.ENDVISIBLE); } /** * Set the end visible flag. * @param row the table row to set * @param value true to set the end visible flag, false otherwise */ public void setEndVisible(int row, boolean value) { setBoolean(row, VisualItem.ENDVISIBLE, value); } /** * Indicates if this item is interactive, meaning it can potentially * respond to mouse and keyboard input events. * @param row the table row * @return true if the item is interactive, false otherwise */ public boolean isInteractive(int row) { return getBoolean(row, VisualItem.INTERACTIVE); } /** * Set the interactive status of the given row. * @param row the table row to set * @param value true for interactive, false for non-interactive */ public void setInteractive(int row, boolean value) { setBoolean(row, VisualItem.INTERACTIVE, value); } /** * Indicates the given row is expanded. Only used for items that are * part of a graph structure. * @param row the table row * @return true if expanded, false otherwise */ public boolean isExpanded(int row) { return getBoolean(row, VisualItem.EXPANDED); } /** * Set the expanded flag. * @param row the table row to set * @param value true to set as expanded, false as collapsed. */ public void setExpanded(int row, boolean value) { setBoolean(row, VisualItem.EXPANDED, value); } /** * Indicates if the given row is fixed, and so will not have its position * changed by any layout or distortion actions. * @param row the table row * @return true if the item has a fixed position, false otherwise */ public boolean isFixed(int row) { return getBoolean(row, VisualItem.FIXED); } /** * Sets if the given row is fixed in its position. * @param row the table row to set * @param value true to fix the item, false otherwise */ public void setFixed(int row, boolean value) { setBoolean(row, VisualItem.FIXED, value); } /** * Indicates if the given row is highlighted. * @param row the table row * @return true for highlighted, false for not highlighted */ public boolean isHighlighted(int row) { return getBoolean(row, VisualItem.HIGHLIGHT); } /** * Set the highlighted status of the given row. How higlighting values are * interpreted by the system depends on the various processing actions * set up for an application (e.g., how a * {@link prefuse.action.assignment.ColorAction} might assign colors * based on the flag). * @param row the table row to set * @param value true to highlight the item, false for no highlighting. */ public void setHighlighted(int row, boolean value) { setBoolean(row, VisualItem.HIGHLIGHT, value); } /** * Indicates if the given row currently has the mouse pointer over it. * @param row the table row * @return true if the mouse pointer is over this item, false otherwise */ public boolean isHover(int row) { return getBoolean(row, VisualItem.HOVER); } /** * Set the hover flag. This is set automatically by the prefuse framework, * so should not need to be set explicitly by application code. * @param row the table row to set * @param value true to set the hover flag, false otherwise */ public void setHover(int row, boolean value) { setBoolean(row, VisualItem.HOVER, value); } // ------------------------------------------------------------------------ /** * Get the current x-coordinate of the given row. * @param row the table row * @return the current x-coordinate */ public double getX(int row) { return getDouble(row, VisualItem.X); } /** * Set the current x-coordinate of the given row. * @param row the table row to set * @param x the new current x-coordinate */ public void setX(int row, double x) { setDouble(row, VisualItem.X, x); } /** * Get the current y-coordinate of the given row. * @param row the table row * @return the current y-coordinate */ public double getY(int row) { return getDouble(row, VisualItem.Y); } /** * Set the current y-coordinate of the given row. * @param row the table row to set * @param y the new current y-coordinate */ public void setY(int row, double y) { setDouble(row, VisualItem.Y, y); } /** * Get the starting x-coordinate of the given row. * @param row the table row * @return the starting x-coordinate */ public double getStartX(int row) { return getDouble(row, VisualItem.STARTX); } /** * Set the starting x-coordinate of the given row. * @param row the table row to set * @param x the new starting x-coordinate */ public void setStartX(int row, double x) { setDouble(row, VisualItem.STARTX, x); } /** * Get the starting y-coordinate of the given row. * @param row the table row * @return the starting y-coordinate */ public double getStartY(int row) { return getDouble(row, VisualItem.STARTY); } /** * Set the starting y-coordinate of the given row. * @param row the table row to set * @param y the new starting y-coordinate */ public void setStartY(int row, double y) { setDouble(row, VisualItem.STARTY, y); } /** * Get the ending x-coordinate of the given row. * @param row the table row * @return the ending x-coordinate */ public double getEndX(int row) { return getDouble(row, VisualItem.ENDX); } /** * Set the ending x-coordinate of the given row. * @param row the table row to set * @param x the new ending x-coordinate */ public void setEndX(int row, double x) { setDouble(row, VisualItem.ENDX, x); } /** * Get the ending y-coordinate of the given row. * @param row the table row * @return the ending y-coordinate */ public double getEndY(int row) { return getDouble(row, VisualItem.ENDY); } /** * Set the ending y-coordinate of the given row. * @param row the table row to set * @param y the new ending y-coordinate */ public void setEndY(int row, double y) { setDouble(row, VisualItem.ENDY, y); } /** * Returns the bounds for the VisualItem at the given row index. The * returned reference is for the actual bounds object used by the * system -- do <b>NOT</b> directly edit the values in this returned * object!! This will corrupt the state of the system. * * @param row the table row * @return the bounding box for the item at the given row */ public Rectangle2D getBounds(int row) { return (Rectangle2D)get(row, VisualItem.BOUNDS); } /** * Set the bounding box for an item. This method is used by Renderer * modules when the bounds are validated, or set by processing Actions * used in conjunction with Renderers that do not perform bounds * management. * @param row the table row to set * @param x the minimum x-coordinate * @param y the minimum y-coorindate * @param w the width of this item * @param h the height of this item * @see VisualItem#BOUNDS */ public void setBounds(int row, double x, double y, double w, double h) { getBounds(row).setRect(x, y, w, h); fireTableEvent(row, row, getColumnNumber(VisualItem.BOUNDS), EventConstants.UPDATE); } // ------------------------------------------------------------------------ /** * Get the current stroke color of the row. The stroke color is used * to draw lines and the outlines of shapes. Color values as represented as * an integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the current stroke color, represented as an integer * @see prefuse.util.ColorLib */ public int getStrokeColor(int row) { return getInt(row, VisualItem.STROKECOLOR); } /** * Set the current stroke color of the row. The stroke color is used to * draw lines and the outlines of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the current stroke color, represented as an integer * @see prefuse.util.ColorLib */ public void setStrokeColor(int row, int color) { setInt(row, VisualItem.STROKECOLOR, color); } /** * Get the starting stroke color of the row. The stroke color is used to * draw lines and the outlines of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the starting stroke color, represented as an integer * @see prefuse.util.ColorLib */ public int getStartStrokeColor(int row) { return getInt(row, VisualItem.STARTSTROKECOLOR); } /** * Set the starting stroke color of the row. The stroke color is used to * draw lines and the outlines of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the starting stroke color, represented as an integer * @see prefuse.util.ColorLib */ public void setStartStrokeColor(int row, int color) { setInt(row, VisualItem.STARTSTROKECOLOR, color); } /** * Get the ending stroke color of the row. The stroke color is used to * draw lines and the outlines of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the ending stroke color, represented as an integer * @see prefuse.util.ColorLib */ public int getEndStrokeColor(int row) { return getInt(row, VisualItem.ENDSTROKECOLOR); } /** * Set the ending stroke color of the row. The stroke color is used to * draw lines and the outlines of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the ending stroke color, represented as an integer * @see prefuse.util.ColorLib */ public void setEndStrokeColor(int row, int color) { setInt(row, VisualItem.ENDSTROKECOLOR, color); } /** * Get the current fill color of the row. The fill color is used to * fill the interior of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the current fill color, represented as an integer * @see prefuse.util.ColorLib */ public int getFillColor(int row) { return getInt(row, VisualItem.FILLCOLOR); } /** * Set the current fill color of the row. The stroke color is used to * fill the interior of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the current fill color, represented as an integer * @see prefuse.util.ColorLib */ public void setFillColor(int row, int color) { setInt(row, VisualItem.FILLCOLOR, color); } /** * Get the starting fill color of the row. The fill color is used to * fill the interior of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the starting fill color, represented as an integer * @see prefuse.util.ColorLib */ public int getStartFillColor(int row) { return getInt(row, VisualItem.STARTFILLCOLOR); } /** * Set the starting fill color of the row. The stroke color is used to * fill the interior of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the starting fill color, represented as an integer * @see prefuse.util.ColorLib */ public void setStartFillColor(int row, int color) { setInt(row, VisualItem.STARTFILLCOLOR, color); } /** * Get the ending fill color of the row. The fill color is used to * fill the interior of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the ending fill color, represented as an integer * @see prefuse.util.ColorLib */ public int getEndFillColor(int row) { return getInt(row, VisualItem.ENDFILLCOLOR); } /** * Set the ending fill color of the row. The stroke color is used to * fill the interior of shapes. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the ending fill color, represented as an integer * @see prefuse.util.ColorLib */ public void setEndFillColor(int row, int color) { setInt(row, VisualItem.ENDFILLCOLOR, color); } /** * Get the current text color of the row. The text color is used to * draw text strings for the item. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the current text color, represented as an integer * @see prefuse.util.ColorLib */ public int getTextColor(int row) { return getInt(row, VisualItem.TEXTCOLOR); } /** * Set the current text color of the row. The text color is used to * draw text strings for the item. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the current text color, represented as an integer * @see prefuse.util.ColorLib */ public void setTextColor(int row, int color) { setInt(row, VisualItem.TEXTCOLOR, color); } /** * Get the starting text color of the row. The text color is used to * draw text strings for the item. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the starting text color, represented as an integer * @see prefuse.util.ColorLib */ public int getStartTextColor(int row) { return getInt(row, VisualItem.STARTTEXTCOLOR); } /** * Set the starting text color of the row. The text color is used to * draw text strings for the item. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the starting text color, represented as an integer * @see prefuse.util.ColorLib */ public void setStartTextColor(int row, int color) { setInt(row, VisualItem.STARTTEXTCOLOR, color); } /** * Get the ending text color of the row. The text color is used to * draw text strings for the item. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with zero alpha component is fully * transparent and will not be drawn. * @param row the table row * @return the ending text color, represented as an integer * @see prefuse.util.ColorLib */ public int getEndTextColor(int row) { return getInt(row, VisualItem.ENDTEXTCOLOR); } /** * Set the ending text color of the row. The text color is used to * draw text strings for the item. Color values as represented as an * integer containing the red, green, blue, and alpha (transparency) * color channels. A color with a zero alpha component is fully * transparent and will not be drawn. * @param row the table row to set * @param color the ending text color, represented as an integer * @see prefuse.util.ColorLib */ public void setEndTextColor(int row, int color) { setInt(row, VisualItem.ENDTEXTCOLOR, color); } // ------------------------------------------------------------------------ /** * Get the current size value of the row. Size values are typically used * to scale an item, either in one-dimension (e.g., a bar chart length) or * two-dimensions (e.g., using pixel area to encode a quantitative value). * @param row the table row * @return the current size value */ public double getSize(int row) { return getDouble(row, VisualItem.SIZE); } /** * Set the current size value of the row. Size values are typically used * to scale an item, either in one-dimension (e.g., a bar chart length) or * two-dimensions (e.g., using pixel area to encode a quantitative value). * @param row the table row to set * @param size the current size value */ public void setSize(int row, double size) { setDouble(row, VisualItem.SIZE, size); } /** * Get the starting size value of the row. Size values are typically used * to scale an item, either in one-dimension (e.g., a bar chart length) or * two-dimensions (e.g., using pixel area to encode a quantitative value). * @param row the table row * @return the starting size value */ public double getStartSize(int row) { return getDouble(row, VisualItem.STARTSIZE); } /** * Set the starting size value of the row. Size values are typically used * to scale an item, either in one-dimension (e.g., a bar chart length) or * two-dimensions (e.g., using pixel area to encode a quantitative value). * @param row the table row to set * @param size the starting size value */ public void setStartSize(int row, double size) { setDouble(row, VisualItem.STARTSIZE, size); } /** * Get the ending size value of the row. Size values are typically used * to scale an item, either in one-dimension (e.g., a bar chart length) or * two-dimensions (e.g., using pixel area to encode a quantitative value). * @param row the table row * @return the ending size value */ public double getEndSize(int row) { return getDouble(row, VisualItem.ENDSIZE); } /** * Set the ending size value of the row. Size values are typically used * to scale an item, either in one-dimension (e.g., a bar chart length) or * two-dimensions (e.g., using pixel area to encode a quantitative value). * @param row the table row to set * @param size the ending size value */ public void setEndSize(int row, double size) { setDouble(row, VisualItem.ENDSIZE, size); } // ------------------------------------------------------------------------ /** * Get the current shape value of the row. One of the SHAPE constants * included in the {@link prefuse.Constants} class. This value only has an * effect if a Renderer that supports different shapes is used * (e.g., {@link prefuse.render.ShapeRenderer}. * @param row the table row * @return the current shape value */ public int getShape(int row) { return getInt(row, VisualItem.SHAPE); } /** * Set the current shape value of the row. One of the SHAPE constants * included in the {@link prefuse.Constants} class. This value only has an * effect if a Renderer that supports different shapes is used * (e.g., {@link prefuse.render.ShapeRenderer}. * @param row the table row to set * @param shape the shape value to use */ public void setShape(int row, int shape) { setInt(row, VisualItem.SHAPE, shape); } // ------------------------------------------------------------------------ /** * Get the current stroke used to draw lines and shape outlines for the * item at the given row. * @return the stroke used to draw lines and shape outlines */ public BasicStroke getStroke(int row) { return (BasicStroke)get(row, VisualItem.STROKE); } /** * Set the current stroke used to draw lines and shape outlines. * @param stroke the stroke to use to draw lines and shape outlines */ public void setStroke(int row, BasicStroke stroke) { set(row, VisualItem.STROKE, stroke); } // ------------------------------------------------------------------------ /** * Get the current font for the row. The font is used as the default * typeface for drawing text for this item. * @param row the table row * @return the current font value */ public Font getFont(int row) { return (Font)get(row, VisualItem.FONT); } /** * Set the current font for the the row. The font is used as the default * typeface for drawing text for this item. * @param row the table row to set * @param font the current font value */ public void setFont(int row, Font font) { set(row, VisualItem.FONT, font); } /** * Get the starting font for the row. The font is used as the default * typeface for drawing text for this item. * @param row the table row * @return the starting font value */ public Font getStartFont(int row) { return (Font)get(row, VisualItem.STARTFONT); } /** * Set the starting font for the row. The font is used as the default * typeface for drawing text for this item. * @param row the table row to set * @param font the starting font value */ public void setStartFont(int row, Font font) { set(row, VisualItem.STARTFONT, font); } /** * Get the ending font for the row. The font is used as the default * typeface for drawing text for this item. * @param row the table row * @return the ending font value */ public Font getEndFont(int row) { return (Font)get(row, VisualItem.ENDFONT); } /** * Set the ending font for the row. The font is used as the default * typeface for drawing text for this item. * @param row the table row to set * @param font the ending font value */ public void setEndFont(int row, Font font) { set(row, VisualItem.ENDFONT, font); } // ------------------------------------------------------------------------ /** * Get the degree-of-interest (DOI) value. The degree-of-interet is an * optional value that can be used to sort items by importance, control * item visibility, or influence particular visual encodings. A common * example is to use the DOI to store the graph distance of a node from * the nearest selected focus node. * @param row the table row * @return the DOI value of this item */ public double getDOI(int row) { return getDouble(row, VisualItem.DOI); } /** * Set the degree-of-interest (DOI) value. The degree-of-interet is an * optional value that can be used to sort items by importance, control * item visibility, or influence particular visual encodings. A common * example is to use the DOI to store the graph distance of a node from * the nearest selected focus node. * @param row the table row to set * @param doi the DOI value of this item */ public void setDOI(int row, double doi) { setDouble(row, VisualItem.DOI, doi); } } // end of class VisualTable