/*
* Copyright (c) 2005, the JUNG Project and the Regents of the University of
* California All rights reserved.
*
* This software is open-source under the BSD license; see either "license.txt"
* or http://jung.sourceforge.net/license.txt for a description.
*
*
* Created on Mar 28, 2005
*/
package edu.uci.ics.jung.visualization.picking;
import java.awt.event.ItemEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
/**
* Maintains the state of what has been 'picked' in the graph.
* The <code>Sets</code> are constructed so that their iterators
* will traverse them in the order in which they are picked.
*
* @author Tom Nelson
* @author Joshua O'Madadhain
*
*/
public class MultiPickedState<T> extends AbstractPickedState<T> implements PickedState<T> {
/**
* the 'picked' vertices
*/
protected Set<T> picked = new LinkedHashSet<T>();
/**
* @see PickedState#pick(ArchetypeVertex, boolean)
*/
public boolean pick(T v, boolean state) {
boolean prior_state = this.picked.contains(v);
if (state) {
picked.add(v);
if(prior_state == false) {
fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
v, ItemEvent.SELECTED));
}
} else {
picked.remove(v);
if(prior_state == true) {
fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
v, ItemEvent.DESELECTED));
}
}
return prior_state;
}
/**
* @see edu.uci.ics.jung.visualization.picking.PickedState#clearPickedVertices()
*/
public void clear() {
Collection<T> unpicks = new ArrayList<T>(picked);
for(T v : unpicks) {
pick(v, false);
}
picked.clear();
}
/**
* @see edu.uci.ics.jung.visualization.picking.PickedState#getPickedEdges()
*/
public Set<T> getPicked() {
return Collections.unmodifiableSet(picked);
}
/**
* @see edu.uci.ics.jung.visualization.picking.PickedState#isPicked(ArchetypeEdge)
*/
public boolean isPicked(T e) {
return picked.contains(e);
}
/**
* for the ItemSelectable interface contract
*/
@SuppressWarnings("unchecked")
public T[] getSelectedObjects() {
List<T> list = new ArrayList<T>(picked);
return (T[])list.toArray();
}
}