package org.limewire.ui.swing.downloads.table.renderer;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JTable;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.application.Resource;
import org.limewire.core.api.download.DownloadItem;
import org.limewire.core.api.download.DownloadState;
import org.limewire.core.api.download.DownloadItem.DownloadItemType;
import org.limewire.ui.swing.components.IconButton;
import org.limewire.ui.swing.downloads.table.DownloadActionHandler;
import org.limewire.ui.swing.table.TableRendererEditor;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.I18n;
import com.google.inject.Inject;
/**
* Cancel and remove buttons for DownloadTable
*/
public class DownloadCancelRendererEditor extends TableRendererEditor {
private final JButton cancelButton;
private final JButton removeButton;
private DownloadItem item;
@Resource
private Icon cancelIcon;
@Resource
private Icon cancelIconPressed;
@Resource
private Icon cancelIconRollover;
/**
* Create the DownloadCancelRendererEditor.
*/
@Inject
public DownloadCancelRendererEditor() {
setLayout(new MigLayout("insets 0, gap 0, nogrid, novisualpadding, alignx center, aligny center"));
GuiUtils.assignResources(this);
cancelButton = new IconButton(cancelIcon, cancelIconRollover, cancelIconPressed);
cancelButton.setActionCommand(DownloadActionHandler.CANCEL_COMMAND);
cancelButton.setToolTipText(I18n.tr("Cancel download"));
removeButton = new IconButton(cancelIcon, cancelIconRollover, cancelIconPressed);
removeButton.setActionCommand(DownloadActionHandler.REMOVE_COMMAND);
removeButton.setToolTipText(I18n.tr("Remove download"));
add(cancelButton, "hidemode 3");
add(removeButton, "hidemode 3");
}
@Inject
public void setActionHandler(final DownloadActionHandler actionHandler) {
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Reset cursor if source component is IconButton.
if (e.getSource() instanceof IconButton) {
((IconButton) e.getSource()).resetDefaultCursor();
}
actionHandler.performAction(e.getActionCommand(), item);
cancelCellEditing();
}
};
cancelButton.addActionListener(listener);
removeButton.addActionListener(listener);
}
private void updateButtons(DownloadItem item) {
if (item.getDownloadItemType() != DownloadItemType.ANTIVIRUS) {
DownloadState state = item.getState();
cancelButton.setVisible(!state.isFinished());
removeButton.setVisible(state.isFinished());
} else {
// Hide all buttons for anti-virus updates.
cancelButton.setVisible(false);
removeButton.setVisible(false);
}
}
@Override
protected Component doTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column) {
if(value instanceof DownloadItem) {
item = (DownloadItem)value;
updateButtons(item);
return this;
} else {
return emptyPanel;
}
}
@Override
protected Component doTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if(value instanceof DownloadItem) {
updateButtons((DownloadItem) value);
return this;
} else {
return emptyPanel;
}
}
}