package prefuse.visual; import prefuse.Visualization; import prefuse.data.Table; import prefuse.data.Tree; import prefuse.data.event.EventConstants; import prefuse.util.collections.IntIterator; /** * A visual abstraction of a tree data structure. NodeItem and EdgeItem tuples * provide the visual representations for the nodes and edges of the tree. * VisualTrees should not be created directly, they are created automatically * by adding data to a Visualization, for example by using the * {@link Visualization#addTree(String, Tree)} method. * * @author <a href="http://jheer.org">jeffrey heer</a> */ public class VisualTree extends Tree implements VisualTupleSet { private Visualization m_vis; private String m_group; /** * Create a new VisualTree. * @param nodes the visual node table * @param edges the visual edge table * @param nodeKey the node table field by which to index the nodes. * This value can be null, indicating that just the row indices should be * used. * @param sourceKey the edge table field storing source (parent) node keys * @param targetKey the edge table field storing target (child) node keys */ public VisualTree(VisualTable nodes, VisualTable edges, String nodeKey, String sourceKey, String targetKey) { super(nodes, edges, nodeKey, sourceKey, targetKey); } /** * Fire a graph event. Makes sure to invalidate all edges connected * to a node that has been updated. * @see prefuse.data.Graph#fireGraphEvent(prefuse.data.Table, int, int, int, int) */ protected void fireGraphEvent(Table t, int first, int last, int col, int type) { // if a node is invalidated, invalidate the edges, too if ( type==EventConstants.UPDATE && col==VisualItem.IDX_VALIDATED && t==getNodeTable() ) { VisualTable nodes = (VisualTable)t; VisualTable edges = (VisualTable)getEdgeTable(); for ( int i=first; i<=last; ++i ) { if ( nodes.isValidated(i) ) continue; // look only for invalidations IntIterator erows = edgeRows(i); while ( erows.hasNext() ) { int erow = erows.nextInt(); edges.setValidated(erow, false); } } } // fire the event off to listeners super.fireGraphEvent(t, first, last, col, type); } // ------------------------------------------------------------------------ // VisualItemTable Methods /** * @see prefuse.visual.VisualTupleSet#getVisualization() */ public Visualization getVisualization() { return m_vis; } /** * Set the visualization associated with this VisualGraph * @param vis the visualization to set */ public void setVisualization(Visualization vis) { m_vis = vis; } /** * Get the visualization data group name for this graph * @return the data group name */ public String getGroup() { return m_group; } /** * Set the visualization data group name for this graph * @return the data group name to use */ public void setGroup(String group) { m_group = group; } } // end of class VisualTree