package org.limewire.ui.swing.upload.table; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.EventObject; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTable; import net.miginfocom.swing.MigLayout; import org.limewire.core.api.upload.UploadItem; import org.limewire.ui.swing.components.HyperlinkButton; 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 action button for the Uploads table. */ class UploadActionRendererEditor extends TableRendererEditor { private final UploadActionHandler actionHandler; private final JButton pauseButton; private final JButton resumeButton; private UploadItem item; /** * Constructs an UploadActionRendererEditor with the specified action * handler. */ public UploadActionRendererEditor(UploadActionHandler actionHandler) { this.actionHandler = actionHandler; setLayout(new BorderLayout()); TransferRendererResources resources = new TransferRendererResources(); pauseButton = new HyperlinkButton(I18n.tr("Pause")); pauseButton.setActionCommand(UploadActionHandler.PAUSE_COMMAND); pauseButton.setFont(resources.getFont()); pauseButton.setToolTipText(I18n.tr("Pause upload")); resumeButton = new HyperlinkButton(I18n.tr("Resume")); resumeButton.setActionCommand(UploadActionHandler.RESUME_COMMAND); resumeButton.setFont(resources.getFont()); resumeButton.setToolTipText(I18n.tr("Resume upload")); if (actionHandler != null) { ActionListener listener = new ButtonListener(); pauseButton.addActionListener(listener); resumeButton.addActionListener(listener); } JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new MigLayout("insets 0 0 0 0, gap 0, novisualpadding, fill, aligny center")); buttonPanel.setOpaque(false); buttonPanel.add(pauseButton, "hidemode 3"); buttonPanel.add(resumeButton, "hidemode 3"); add(buttonPanel, BorderLayout.CENTER); } @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; } } @Override public final boolean shouldSelectCell(EventObject e) { return true; } /** * Updates the visibility of the buttons. */ private void updateButtons(UploadItem uploadItem) { pauseButton.setVisible(UploadMediator.isPausable(uploadItem)); resumeButton.setVisible(UploadMediator.isResumable(uploadItem)); } /** * Listener to handle button actions. */ private class ButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { actionHandler.performAction(e.getActionCommand(), item); cancelCellEditing(); } } }