/* * Created on Aug 19, 2005 */ package org.seqcode.viz.utils; import java.util.*; import javax.swing.*; import java.awt.*; import java.awt.event.MouseListener; /** * @author tdanford */ public class SimpleListPanel<X> extends JPanel implements ListPanel<X> { private MutableListModel model; private JList list; protected ListPanelEventSource.Default source; public SimpleListPanel() { super(); source = new ListPanelEventSource.Default(this); model = new MutableListModel(); list = new JList(model); setLayout(new BorderLayout()); add(new JScrollPane(list), BorderLayout.CENTER); } public void addListMouseListener(MouseListener ml) { list.addMouseListener(ml); } public void removeListMouseListener(MouseListener ml) { list.removeMouseListener(ml); } public void addListPanelListener(ListPanelListener lpl) { source.addListPanelListener(lpl); } public void removeListPanelListener(ListPanelListener lpl) { source.removeListPanelListener(lpl); } public int getNumValues() { return model.getSize(); } public X getValue(int index) { return (X)model.elementAt(index); } public void addValue(X v) { model.addElement(v); } public void addAll(Collection<X> vals) { for(X v : vals) { model.addElement(v); } } public void setValue(int index, X v) { model.setElementAt(v, index); } public void clear() { model.clear(); } public void removeValue(int index) { model.remove(index); } public int[] getSelectedIndices() { return list.getSelectedIndices(); } public void fireValueChanged(X v) { model.fireContentsChanged(v); } public void fireIndexChanged(int index) { model.fireContentsChanged(index); } public boolean containsValue(X v) { return model.contains(v); } public Collection<X> getAllValues() { LinkedList<X> lst = new LinkedList<X>(); for(int i = 0; i < model.getSize(); i++) { lst.addLast((X)model.get(i)); } return lst; } public void removeSelectedValues() { int[] inds = getSelectedIndices(); for(int i = inds.length-1; i >= 0; i--) { removeValue(inds[i]); } } public X getFirstSelectedValue() { int[] inds = list.getSelectedIndices(); if(inds.length > 0) { return getValue(inds[0]); } else { return null; } } public Collection<X> getSelectedValues() { LinkedList<X> lst = new LinkedList<X>(); int[] inds = list.getSelectedIndices(); for(int i = 0; i < inds.length; i++) { lst.addLast(getValue(inds[i])); } return lst; } } class MutableListModel extends DefaultListModel { public MutableListModel() { super(); } public void fireContentsChanged(Object v) { int index = indexOf(v); fireContentsChanged(this, index, index); } public void fireContentsChanged(int index) { fireContentsChanged(this, index, index); } }