package org.limewire.ui.swing.upload.table; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JTable; import net.miginfocom.swing.MigLayout; import org.limewire.core.api.upload.UploadItem; import org.limewire.ui.swing.components.IconButton; import org.limewire.ui.swing.table.TableRendererEditor; import org.limewire.ui.swing.transfer.TransferRendererResources; import org.limewire.ui.swing.upload.UploadMediator; import org.limewire.ui.swing.util.I18n; /** * Cell renderer/editor to display the cancel and remove buttons for the * uploads table. */ class UploadCancelRendererEditor extends TableRendererEditor { private final UploadActionHandler actionHandler; private final JButton cancelButton; private final JButton removeButton; private UploadItem item; /** * Constructs an UploadCancelRendererEditor with the specified action * handler. */ public UploadCancelRendererEditor(UploadActionHandler actionHandler) { this.actionHandler = actionHandler; setLayout(new MigLayout("insets 0, gap 0, nogrid, novisualpadding, alignx center, aligny center")); TransferRendererResources resources = new TransferRendererResources(); cancelButton = new IconButton(); resources.decorateCancelButton(cancelButton); cancelButton.setActionCommand(UploadActionHandler.CANCEL_COMMAND); cancelButton.setToolTipText(I18n.tr("Cancel upload")); removeButton = new IconButton(); resources.decorateCancelButton(removeButton); removeButton.setActionCommand(UploadActionHandler.REMOVE_COMMAND); removeButton.setToolTipText(I18n.tr("Remove upload")); if (actionHandler != null) { ActionListener listener = new ButtonListener(); cancelButton.addActionListener(listener); removeButton.addActionListener(listener); } add(cancelButton, "hidemode 3"); add(removeButton, "hidemode 3"); } @Override protected Component doTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (value instanceof UploadItem) { item = (UploadItem) 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 UploadItem) { updateButtons((UploadItem) value); return this; } else { return emptyPanel; } } /** * Updates the visibility of the buttons. */ private void updateButtons(UploadItem item) { boolean removable = UploadMediator.isRemovable(item); cancelButton.setVisible(!removable); removeButton.setVisible(removable); } /** * Listener to handle button actions. */ private class ButtonListener implements 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(); } } }