package org.limewire.ui.swing.search.resultpanel; import java.awt.Component; import java.awt.Point; import java.util.ArrayList; import java.util.List; import org.limewire.ui.swing.search.model.VisualSearchResult; import org.limewire.ui.swing.table.TablePopupHandler; public class SearchPopupHandler implements TablePopupHandler { private final ResultsTable<VisualSearchResult> resultsTable; private final SearchResultMenuFactory menuFactory; private final DownloadHandler downloadHandler; public SearchPopupHandler(DownloadHandler downloadHandler, ResultsTable<VisualSearchResult> resultsTable, SearchResultMenuFactory menuFactory) { this.downloadHandler = downloadHandler; this.resultsTable = resultsTable; this.menuFactory = menuFactory; } @Override public boolean isPopupShowing(int row) { return false; } @Override public void maybeShowPopup(Component component, int x, int y) { List<Integer> selectedRows = asList(resultsTable.getSelectedRows()); int popupRow = resultsTable.rowAtPoint(new Point(x, y)); if (selectedRows.size() <= 1 || !selectedRows.contains(popupRow)) { selectedRows.clear(); selectedRows.add(popupRow); resultsTable.setRowSelectionInterval(popupRow, popupRow); } List<VisualSearchResult> selectedItems = new ArrayList<VisualSearchResult>(); for (Integer row : selectedRows) { if (row != -1) { VisualSearchResult visualSearchResult = resultsTable.getEventTableModel() .getElementAt(row); if (visualSearchResult != null) { selectedItems.add(visualSearchResult); } } } menuFactory.create(downloadHandler, selectedItems, SearchResultMenu.ViewType.Table).show(component, x, y); } private List<Integer> asList(int[] array) { List<Integer> list = new ArrayList<Integer>(); for(int i = 0; i < array.length; i++) { list.add(array[i]); } return list; } }