package org.limewire.ui.swing.upload.table; import java.awt.Component; import java.awt.Point; import java.util.List; import javax.swing.JPopupMenu; import org.limewire.core.api.upload.UploadItem; import org.limewire.ui.swing.table.TablePopupHandler; /** * Popup menu handler for the Uploads table. */ public class UploadPopupHandler implements TablePopupHandler { private final UploadTable table; private final UploadPopupMenuFactory popupMenuFactory; private JPopupMenu popupMenu; /** * Constructs a popup handler for the specified table. */ public UploadPopupHandler(UploadTable table, UploadPopupMenuFactory popupMenuFactory) { this.table = table; this.popupMenuFactory = popupMenuFactory; } @Override public boolean isPopupShowing(int row) { return (popupMenu != null) && popupMenu.isVisible(); } @Override public void maybeShowPopup(Component component, int x, int y) { // Get popup row. int popupRow = table.rowAtPoint(new Point(x, y)); if (popupRow < 0) { return; } // Get item for popup row, and selected items. UploadItem item = table.getUploadItem(popupRow); List<UploadItem> uploadItems = table.getSelectedItems(); // Adjust selection if popup row is not selected. if ((uploadItems.size() == 0) || !uploadItems.contains(item)) { table.setRowSelectionInterval(popupRow, popupRow); uploadItems = table.getSelectedItems(); } // Create popup menu and display. popupMenu = popupMenuFactory.create(table, uploadItems); popupMenu.show(component, x, y); } }