content: package tim.prune.gui;
  
  import java.util.ArrayList;
  import javax.swing.AbstractListModel;
  
  import tim.prune.data.DataPoint;
  import tim.prune.data.Track;
  
  /**
   * Class to act as list model for the waypoint list
   */
  public class WaypointListModel extends AbstractListModel<String>
  {
  	private final Track _track;
  	private final ArrayList<DataPoint> _waypoints;
  
  	/**
  	 * Constructor giving Track object
  	 * @param inTrack Track object
  	 */
  	public WaypointListModel(Track inTrack)
  	{
  		_track = inTrack;
  		_waypoints = new ArrayList<DataPoint>();
  		_track.getWaypoints(_waypoints);
  	}
  
  	/**
  	 * @see javax.swing.ListModel#getSize()
  	 */
  	public int getSize() {
  		return _waypoints.size();
  	}
  
  	/**
  	 * @see javax.swing.ListModel#getElementAt(int)
  	 */
  	public String getElementAt(int inIndex)
  	{
  		DataPoint p = null;
  		if (inIndex < 0 || inIndex >= getSize()
  			|| _waypoints == null || (p = _waypoints.get(inIndex)) == null) {
  			return "";
  		}
  		return p.getWaypointName();
  	}
  
  	/**
  	 * Get the waypoint at the given index
  	 * @param inIndex index number, starting at 0
  	 * @return DataPoint object
  	 */
  	public DataPoint getWaypoint(int inIndex) {
  		return _waypoints.get(inIndex);
  	}
  
  	/**
  	 * Fire event to notify that contents have changed
  	 */
  	public void fireChanged()
  	{
  		_track.getWaypoints(_waypoints);
  		this.fireContentsChanged(this, 0, getSize()-1);
  	}
  }
  