package org.limewire.ui.swing.downloads.table; import java.awt.Component; import java.awt.Point; import java.util.List; import org.limewire.core.api.download.DownloadItem; import org.limewire.core.api.download.DownloadItem.DownloadItemType; import org.limewire.ui.swing.table.TablePopupHandler; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; /** * Popup handler for the download display tables. */public class DownloadPopupHandler implements TablePopupHandler { private final DownloadTable table; private final DownloadTableMenuFactory menuFactory; /** * Constructs a DownloadPopupHandler using the specified action handler and * display table. */ @Inject public DownloadPopupHandler(@Assisted DownloadTable table, DownloadTableMenuFactory menuFactory) { this.table = table; this.menuFactory = menuFactory; } @Override public boolean isPopupShowing(int row) { return false; } @Override public void maybeShowPopup(Component component, int x, int y) { adjustTableSelection(x, y); showMenu(component, x, y); } /** * Returns the index of the table row at the specified (x,y) location. */ private void adjustTableSelection(int x, int y) { int popupRow = table.rowAtPoint(new Point(x, y)); DownloadItem selectedItem = table.getDownloadItem(popupRow); if(selectedItem == null) return; List<DownloadItem> selectedItems = table.getSelectedItems(); if (selectedItems.size() <= 1 || !selectedItems.contains(selectedItem)) { selectedItems.clear(); table.setRowSelectionInterval(popupRow, popupRow); } } private void showMenu(Component component, int x, int y){ // Skip menu if only AVG update is selected. List<DownloadItem> selectedItems = table.getSelectedItems(); if (selectedItems.size() == 1 && selectedItems.get(0).getDownloadItemType() == DownloadItemType.ANTIVIRUS) { return; } menuFactory.create(table).show(component, x, y); } }