package org.limewire.ui.swing.upload.table; import java.awt.event.ActionEvent; import java.util.Collections; import java.util.List; import javax.swing.AbstractAction; import javax.swing.table.TableCellRenderer; import org.jdesktop.application.Resource; import org.limewire.core.api.library.LibraryManager; import org.limewire.core.api.upload.UploadItem; import org.limewire.core.api.upload.UploadItem.UploadItemType; import org.limewire.ui.swing.components.decorators.ProgressBarDecorator; import org.limewire.ui.swing.transfer.TransferTable; import org.limewire.ui.swing.upload.UploadMediator; import org.limewire.ui.swing.util.CategoryIconManager; import org.limewire.ui.swing.util.GuiUtils; import ca.odell.glazedlists.ListSelection; import ca.odell.glazedlists.swing.DefaultEventSelectionModel; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; /** * Table to display the list of UploadItems. */ public class UploadTable extends TransferTable<UploadItem> { @Resource private int rowHeight; @Resource private int gapMinWidth; @Resource private int gapPrefWidth; @Resource private int gapMaxWidth; @Resource private int titleMinWidth; @Resource private int titlePrefWidth; @Resource private int titleMaxWidth; @Resource private int progressMinWidth; @Resource private int progressPrefWidth; @Resource private int progressMaxWidth; @Resource private int messageMinWidth; @Resource private int messagePrefWidth; @Resource private int messageMaxWidth; @Resource private int actionMinWidth; @Resource private int actionPrefWidth; @Resource private int actionMaxWidth; @Resource private int cancelMinWidth; @Resource private int cancelPrefWidth; @Resource private int cancelMaxWidth; private final CategoryIconManager iconManager; private final UploadActionHandler uploadActionHandler; private final DefaultEventSelectionModel<UploadItem> selectionModel; private final UploadProgressRenderer uploadProgressRenderer; @Inject public UploadTable(@Assisted UploadMediator uploadMediator, LibraryManager libraryManager, CategoryIconManager iconManager, ProgressBarDecorator progressBarDecorator, UploadPopupMenuFactory popupMenuFactory, UploadActionHandler uploadActionHandler) { super(uploadMediator.getUploadList(), new UploadTableFormat()); this.iconManager = iconManager; this.uploadActionHandler = uploadActionHandler; this.uploadProgressRenderer = new UploadProgressRenderer(progressBarDecorator); GuiUtils.assignResources(this); // Set selection model. selectionModel = new DefaultEventSelectionModel<UploadItem>(uploadMediator.getUploadList()); selectionModel.setSelectionMode(ListSelection.MULTIPLE_INTERVAL_SELECTION_DEFENSIVE); setSelectionModel(selectionModel); setRowHeight(rowHeight); setPopupHandler(new UploadPopupHandler(this, popupMenuFactory)); setEnterKeyAction(new LaunchAction()); initializeColumns(); initializeRenderers(); } /** * Initializes the columns in the table. */ private void initializeColumns() { setColumnWidths(UploadTableFormat.TITLE_COL, titleMinWidth, titlePrefWidth, titleMaxWidth); setColumnWidths(UploadTableFormat.TITLE_GAP, gapMinWidth, gapPrefWidth, gapMaxWidth); setColumnWidths(UploadTableFormat.PROGRESS_COL, progressMinWidth, progressPrefWidth, progressMaxWidth); setColumnWidths(UploadTableFormat.PROGRESS_GAP, gapMinWidth, gapPrefWidth, gapMaxWidth); setColumnWidths(UploadTableFormat.MESSAGE_COL, messageMinWidth, messagePrefWidth, messageMaxWidth); setColumnWidths(UploadTableFormat.MESSAGE_GAP, gapMinWidth, gapPrefWidth, gapMaxWidth); setColumnWidths(UploadTableFormat.ACTION_COL, actionMinWidth, actionPrefWidth, actionMaxWidth); setColumnWidths(UploadTableFormat.ACTION_GAP, gapMinWidth, gapPrefWidth, gapMaxWidth); setColumnWidths(UploadTableFormat.CANCEL_COL, cancelMinWidth, cancelPrefWidth, cancelMaxWidth); } /** * Initializes the cell renderers and editors in the table. */ private void initializeRenderers() { // Set column renderers. setColumnRenderer(UploadTableFormat.TITLE_COL, new UploadTitleRenderer(iconManager)); setColumnRenderer(UploadTableFormat.MESSAGE_COL, new UploadMessageRenderer(uploadActionHandler)); setColumnRenderer(UploadTableFormat.PROGRESS_COL, uploadProgressRenderer); setColumnRenderer(UploadTableFormat.ACTION_COL, new UploadActionRendererEditor(null)); setColumnRenderer(UploadTableFormat.CANCEL_COL, new UploadCancelRendererEditor(null)); // Set column gap renderers. TableCellRenderer gapRenderer = new GapRenderer(); setColumnRenderer(UploadTableFormat.TITLE_GAP, gapRenderer); setColumnRenderer(UploadTableFormat.PROGRESS_GAP, gapRenderer); setColumnRenderer(UploadTableFormat.MESSAGE_GAP, gapRenderer); setColumnRenderer(UploadTableFormat.ACTION_GAP, gapRenderer); // Set column editors. setColumnEditor(UploadTableFormat.ACTION_COL, new UploadActionRendererEditor(uploadActionHandler)); setColumnEditor(UploadTableFormat.CANCEL_COL, new UploadCancelRendererEditor(uploadActionHandler)); setColumnEditor(UploadTableFormat.MESSAGE_COL, new UploadMessageRenderer(uploadActionHandler)); } /** * Returns a list of the selected upload items. */ public List<UploadItem> getSelectedItems() { return Collections.unmodifiableList(selectionModel.getSelected()); } /** * Returns the upload item associated with the specified table row. */ public UploadItem getUploadItem(int row) { return getElementAt(row); } /** * Action to launch the selected upload. */ private class LaunchAction extends AbstractAction { @Override public void actionPerformed(ActionEvent e) { List<UploadItem> selectedItems = getSelectedItems(); if (selectedItems.size() == 1) { UploadItem item = selectedItems.get(0); if (item.getUploadItemType() == UploadItemType.GNUTELLA && !UploadMediator.isBrowseHost(item)) { uploadActionHandler.performAction(UploadActionHandler.LAUNCH_COMMAND, item); } } } } }