package com.limegroup.gnutella.gui; import javax.swing.AbstractListModel; import com.limegroup.gnutella.util.Buffer; /** * Use the Buffer class to efficiently deal with adding to a * fixed sized ListModel. * * @author Greg Bildson */ public class BufferListModel extends AbstractListModel { private Buffer buffer; /** * Create list model with size capacity */ public BufferListModel(int size) { buffer = new Buffer(size); } /** * Implement the default value getter for ListModel */ public Object getElementAt(int idx) { return buffer.get(idx); } /** * Implement the default size return for ListModel */ public int getSize() { if ( buffer == null ) return 0; return buffer.getSize(); } /** * Change the size of the fixed list while maintaining the content */ public void changeSize(int size) { if ( size == 0 ) { int oldSize = 0; if ( buffer != null ) oldSize = buffer.getSize(); buffer = null; fireContentsChanged(this, 0, oldSize); return; } Buffer nbuffer = new Buffer(size); for ( int i = 0; buffer != null && i < Math.min(buffer.getSize(), size); i++ ) { nbuffer.addFirst(buffer.get(i)); } buffer = nbuffer; //fireContentsChanged(this, 0, Math.max(buffer.getSize(),size)); } /** * Clear the list */ public void removeAllElements() { if ( buffer == null ) return; buffer.clear(); fireContentsChanged(this, 0, buffer.getCapacity()); } /** * Add to the top of the fixed-size list */ public void addFirst(Object val) { if ( buffer == null ) return; buffer.addFirst(val); fireContentsChanged(this, 0, buffer.getSize()); } }