package org.limewire.ui.swing.search.resultpanel.classic; import java.awt.Component; import java.util.ArrayList; import java.util.EventObject; import java.util.List; import javax.swing.JTable; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import net.miginfocom.swing.MigLayout; import org.jdesktop.swingx.JXPanel; import org.limewire.core.api.download.DownloadItem; import org.limewire.ui.swing.components.RemoteHostWidget; import org.limewire.ui.swing.search.model.VisualSearchResult; public class FromTableCellRenderer extends JXPanel implements TableCellRenderer, TableCellEditor { private final List<CellEditorListener> listeners = new ArrayList<CellEditorListener>(); private final RemoteHostWidget fromWidget; public FromTableCellRenderer(RemoteHostWidget fromWidget) { super(new MigLayout("insets 0 5 0 0, aligny 50%")); this.fromWidget = fromWidget; add(fromWidget); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value != null) { if(value instanceof DownloadItem) { fromWidget.setPeople(((DownloadItem)value).getRemoteHosts()); } else if(value instanceof VisualSearchResult) { fromWidget.setPeople(((VisualSearchResult)value).getSources() ); } } fromWidget.setForeground(this.getForeground()); return this; } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if(!isSelected) setBackground(table.getBackground()); else setBackground(table.getSelectionBackground()); if (value != null) { if(value instanceof DownloadItem) { fromWidget.setPeople(((DownloadItem)value).getRemoteHosts()); } else if(value instanceof VisualSearchResult) { fromWidget.setPeople(((VisualSearchResult)value).getSources() ); } } fromWidget.setForeground(this.getForeground()); return this; } @Override public void addCellEditorListener(CellEditorListener lis) { synchronized (listeners) { if (!listeners.contains(lis)) listeners.add(lis); } } @Override public void cancelCellEditing() { synchronized (listeners) { for (int i = 0, N = listeners.size(); i < N; i++) { listeners.get(i).editingCanceled(new ChangeEvent(this)); } } } @Override public Object getCellEditorValue() { return null; } @Override public boolean isCellEditable(EventObject anEvent) { return true; } @Override public void removeCellEditorListener(CellEditorListener lis) { synchronized (listeners) { if (listeners.contains(lis)) listeners.remove(lis); } } @Override public boolean shouldSelectCell(EventObject anEvent) { return false; } @Override public boolean stopCellEditing() { synchronized (listeners) { for (int i = 0, N = listeners.size(); i < N; i++) { listeners.get(i).editingStopped(new ChangeEvent(this)); } } return true; } @Override public String getToolTipText(){ return fromWidget.getToolTipText(); } }