package prefuse.action;
import java.util.Iterator;
import prefuse.Visualization;
import prefuse.data.expression.Predicate;
import prefuse.visual.VisualItem;
import prefuse.visual.expression.VisiblePredicate;
/**
* An Action that processes VisualItems one item at a time. By default,
* it only processes items that are visible. Use the
* {@link #setFilterPredicate(Predicate)} method
* to change the filtering criteria.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public abstract class ItemAction extends GroupAction {
/** A reference to filtering predicate for this Action */
protected Predicate m_predicate;
/**
* Create a new ItemAction that processes all groups.
* @see Visualization#ALL_ITEMS
*/
public ItemAction() {
this((Visualization)null);
}
/**
* Create a new ItemAction that processes all groups.
* @param vis the {@link prefuse.Visualization} to process
* @see Visualization#ALL_ITEMS
*/
public ItemAction(Visualization vis) {
this(vis, Visualization.ALL_ITEMS);
}
/**
* Create a new ItemAction that processes the specified group.
* @param group the name of the group to process
*/
public ItemAction(String group) {
this(null, group);
}
/**
* Create a new ItemAction that processes the specified group.
* @param group the name of the group to process
* @param filter the filtering {@link prefuse.data.expression.Predicate}
*/
public ItemAction(String group, Predicate filter) {
this(null, group, filter);
}
/**
* Create a new ItemAction that processes the specified group.
* @param vis the {@link prefuse.Visualization} to process
* @param group the name of the group to process
*/
public ItemAction(Visualization vis, String group) {
this(vis, group, VisiblePredicate.TRUE);
}
/**
* Create a new ItemAction that processes the specified group.
* @param vis the {@link prefuse.Visualization} to process
* @param group the name of the group to process
* @param filter the filtering {@link prefuse.data.expression.Predicate}
*/
public ItemAction(Visualization vis, String group, Predicate filter) {
super(vis, group);
m_predicate = filter;
}
// ------------------------------------------------------------------------
/**
* Returns the filtering predicate used by this Action.
* @return the filtering {@link prefuse.data.expression.Predicate}
*/
public Predicate getFilterPredicate() {
return m_predicate;
}
/**
* Sets the filtering predicate used by this Action.
* @param filter the filtering {@link prefuse.data.expression.Predicate}
* to use
*/
public void setFilterPredicate(Predicate filter) {
m_predicate = filter;
}
/**
* @see prefuse.action.Action#run(double)
*/
public void run(double frac) {
Iterator items = getVisualization().items(m_group, m_predicate);
while ( items.hasNext() ) {
process((VisualItem)items.next(), frac);
}
}
/**
* Processes an individual item.
* @param item the VisualItem to process
* @param frac the fraction of elapsed duration time
*/
public abstract void process(VisualItem item, double frac);
} // end of class ItemAction