package org.limewire.ui.swing.downloads.table; import java.util.ArrayList; import java.util.List; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import org.limewire.core.api.download.DownloadItem; import ca.odell.glazedlists.EventList; import ca.odell.glazedlists.event.ListEvent; import ca.odell.glazedlists.event.ListEventListener; public class HorizontalDownloadTableModel implements TableModel { private List<TableModelListener> listeners; private EventList<DownloadItem> downloadItems; public HorizontalDownloadTableModel(EventList<DownloadItem> downloadItems) { this.downloadItems = downloadItems; listeners = new ArrayList<TableModelListener>(); downloadItems.addListEventListener(new ListEventListener<DownloadItem>() { @Override public void listChanged(ListEvent<DownloadItem> listChanges) { while(listChanges.nextBlock()) { if(listChanges.getType() == ListEvent.INSERT || listChanges.getType() == ListEvent.DELETE){ fireTableModelEvent(new TableModelEvent(HorizontalDownloadTableModel.this,TableModelEvent.HEADER_ROW)); } else if(listChanges.getType() == ListEvent.UPDATE){ fireTableModelEvent(new TableModelEvent(HorizontalDownloadTableModel.this, TableModelEvent.UPDATE)); } } } }); } public DownloadItem getDownloadItem(int index){ //in accessible tables, can be 0 even if no items exist if(index >= downloadItems.size()) { return null; } else { return downloadItems.get(downloadItems.size() - 1 - index); } } @Override public Class<?> getColumnClass(int columnIndex) { // in accessible tables, columnIndex can be larger than column count return DownloadItem.class; } @Override public int getColumnCount() { return downloadItems.size(); } @Override public String getColumnName(int columnIndex) { // in accessible tables, columnIndex can be larger than column count return Integer.toString(columnIndex); } @Override public int getRowCount() { return 1; } @Override public Object getValueAt(int rowIndex, int columnIndex) { // in accessible tables, rowIndex and columnIndex can be larger than row and column counts if (columnIndex >= downloadItems.size() || rowIndex > 0){ return null; } return getDownloadItem(columnIndex); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { // in accessible tables, rowIndex and columnIndex can be larger than row and column counts if (columnIndex >= downloadItems.size() || rowIndex > 0){ return false; } return true; } @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { //do nothing } @Override public void addTableModelListener(TableModelListener l) { listeners.add(l); } protected void fireTableModelEvent(TableModelEvent e) { for (TableModelListener l : listeners) { l.tableChanged(e); } } @Override public void removeTableModelListener(TableModelListener l) { listeners.remove(l); } }