1 package prefuse.data.query; 2 3 import java.util.ArrayList ; 4 5 import javax.swing.DefaultListSelectionModel ; 6 import javax.swing.MutableComboBoxModel ; 7 import javax.swing.event.ListDataEvent ; 8 import javax.swing.event.ListDataListener ; 9 10 import prefuse.util.collections.CopyOnWriteArrayList; 11 12 19 public class ListModel extends DefaultListSelectionModel 20 implements MutableComboBoxModel 21 { 22 private ArrayList m_items = new ArrayList (); 23 private CopyOnWriteArrayList m_lstnrs = new CopyOnWriteArrayList(); 24 25 28 public ListModel() { 29 } 31 32 36 public ListModel(final Object [] items) { 37 for ( int i=0; i<items.length; ++i ) 38 m_items.add(items[i]); 39 } 40 41 43 47 private boolean isMultipleSelection() { 48 return getMaxSelectionIndex()-getMinSelectionIndex() > 0; 49 } 50 51 54 public Object getSelectedItem() { 55 int idx = getMinSelectionIndex(); 56 return ( idx == -1 ? null : m_items.get(idx) ); 57 } 58 59 62 public void setSelectedItem(Object item) { 63 int idx = m_items.indexOf(item); 64 if ( idx < 0 ) return; 65 66 if ( !isMultipleSelection() && idx == getMinSelectionIndex() ) 67 return; 68 69 super.setSelectionInterval(idx,idx); 70 fireDataEvent(this,ListDataEvent.CONTENTS_CHANGED,-1,-1); 71 } 72 73 76 public int getSize() { 77 return m_items.size(); 78 } 79 80 83 public Object getElementAt(int idx) { 84 return m_items.get(idx); 85 } 86 87 90 public void addElement(Object item) { 91 m_items.add(item); 92 int sz = m_items.size()-1; 93 fireDataEvent(this,ListDataEvent.INTERVAL_ADDED,sz,sz); 94 if ( sz >= 0 && isSelectionEmpty() && item != null ) 95 setSelectedItem(item); 96 } 97 98 101 public void insertElementAt(Object item, int idx) { 102 m_items.add(idx, item); 103 fireDataEvent(this,ListDataEvent.INTERVAL_ADDED,idx,idx); 104 } 105 106 109 public void removeElement(Object item) { 110 int idx = m_items.indexOf(item); 111 if ( idx >= 0 ) 112 removeElementAt(idx); 113 } 114 115 118 public void removeElementAt(int idx) { 119 if ( !isMultipleSelection() && idx == getMinSelectionIndex() ) { 120 int sidx = ( idx==0 ? getSize()==1 ? -1 : idx+1 : idx-1 ); 121 Object sel = ( sidx == -1 ? null : m_items.get(sidx) ); 122 setSelectedItem(sel); 123 } 124 125 m_items.remove(idx); 126 fireDataEvent(this,ListDataEvent.INTERVAL_REMOVED,idx,idx); 127 } 128 129 132 135 public void addListDataListener(ListDataListener l) { 136 if ( !m_lstnrs.contains(l) ) 137 m_lstnrs.add(l); 138 } 139 140 143 public void removeListDataListener(ListDataListener l) { 144 m_lstnrs.remove(l); 145 } 146 147 150 protected void fireDataEvent(Object src, int type, int idx0, int idx1) { 151 Object [] lstnrs = m_lstnrs.getArray(); 152 if ( lstnrs.length > 0 ) { 153 ListDataEvent e = new ListDataEvent (src, type, idx0, idx1); 154 for ( int i=0; i<lstnrs.length; ++i ) { 155 ((ListDataListener )lstnrs[i]).contentsChanged(e); 156 } 157 } 158 } 159 160 } | Popular Tags |