package morepaste.util; import java.util.Vector; import java.util.NoSuchElementException; import javax.swing.DefaultListModel; /** * @version 1.0.1 2002-01-21 * @author Takashi KOBAYASHI * @see javax.swing.DefaultListModel */ public class CheckBoxListModel extends DefaultListModel { private Vector selected, enabled; private boolean defaultSelected; private boolean defaultEnabled; public CheckBoxListModel() { super(); selected = new Vector(); enabled = new Vector(); defaultSelected = false; defaultEnabled = true; } //-------------------- getter/setter public void setDefaultChecked( boolean state ) { defaultSelected = state; } public boolean getDefaultChecked() { return defaultSelected; } public void setDefaultEnabled( boolean state ) { defaultEnabled = state; } public boolean getDefaultEnabled() { return defaultEnabled; } public boolean isSelectedAt( int index ) { Object obj = selected.get( index ); if( obj == null ) { throw new NoSuchElementException(); } return ( (Boolean)obj ).booleanValue(); } public void setSelectedAt( int index, boolean selected ) { if( get( index ) == null ) { throw new NoSuchElementException(); } this.selected.set( index, new Boolean( selected ) ); } public boolean isEnabledAt( int index ) { Object obj = enabled.get( index ); if( obj == null ) { throw new NoSuchElementException(); } return ( (Boolean)obj ).booleanValue(); } public void setEnabledAt( int index, boolean enabled ) { if( get( index ) == null ) { throw new NoSuchElementException(); } this.enabled.set( index, new Boolean( enabled ) ); } //-------------------- new apllicable public synchronized void add( int index, Object obj, boolean selected ) { this.selected.add( index, new Boolean( selected ) ); this.enabled.add( index, new Boolean( defaultEnabled ) ); super.add( index, obj ); } public synchronized void addElement( Object obj, boolean selected ) { add( getSize(), obj, selected ); } //-------------------- for compatibility public synchronized void add( int index, Object obj ) { add( index, obj, defaultSelected ); } public synchronized void addElement( Object obj ) { addElement( obj, defaultSelected ); } public synchronized void clear() { selected.clear(); enabled.clear(); super.clear(); } public synchronized void insertElementAt( Object obj, int index ) { add( index, obj ); } public synchronized Object remove( int index ) { selected.remove( index ); enabled.remove( index ); return super.remove( index ); } public synchronized void removeAllElements() { selected.removeAllElements(); enabled.removeAllElements(); super.removeAllElements(); } public synchronized boolean removeElement( Object obj ) { int i = indexOf( obj ); selected.removeElementAt( i ); enabled.removeElementAt( i ); return super.removeElement( obj ); } public synchronized void removeElementAt( int index ) { remove( index ); } public synchronized void removeRange( int fromIndex, int toIndex ) { for(int i = toIndex; i >= fromIndex; i--) { selected.removeElementAt( i ); enabled.removeElementAt( i ); super.removeElementAt( i ); } fireIntervalRemoved(this, fromIndex, toIndex); } public synchronized Object set(int index, Object element) { selected.setElementAt( new Boolean( defaultSelected ), index ); enabled.setElementAt( new Boolean( defaultEnabled ), index ); return super.set( index, element ); } public synchronized void setElementAt(Object obj, int index) { set( index, obj ); } public synchronized void setSize( int newSize ) { selected.setSize( newSize ); enabled.setSize( newSize ); super.setSize( newSize ); } public synchronized void trimToSize() { selected.trimToSize(); enabled.trimToSize(); super.trimToSize(); } }