package org.limewire.ui.swing.library.table; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.JPopupMenu; import org.limewire.core.api.library.LibraryFileList; import org.limewire.core.api.library.LocalFileItem; import org.limewire.core.api.library.LocalFileList; import org.limewire.ui.swing.library.LibrarySelected; import com.google.inject.Inject; import com.google.inject.Provider; public class LibraryPopupMenu extends JPopupMenu { private final Provider<List<File>> selectedFiles; private final Provider<LocalFileList> selectedLocalFileList; private final Provider<List<LocalFileItem>> selectedLocalFileItems; private final ListMenuFactory listMenuFactory; private final Provider<LaunchFileAction> launchAction; private final Provider<RenameFileAction> renameFileAction; private final Provider<LocateFileAction> locateAction; private final Provider<RemoveFromListMenu> removeFromListMenu; private final Provider<RemoveFromListAction> removeFromListAction; private final DeleteAction deleteAction; private final Provider<ViewFileInfoAction> fileInfoAction; @Inject public LibraryPopupMenu( @LibrarySelected Provider<List<File>> selectedFiles, @LibrarySelected Provider<LocalFileList> selectedLocalFileList, @LibrarySelected Provider<List<LocalFileItem>> selectedLocalFileItems, ListMenuFactory listMenuFactory, Provider<RemoveFromListMenu> removeFromListMenu, Provider<RemoveFromListAction> removeFromListAction, Provider<LaunchFileAction> launchAction, Provider<LocateFileAction> locateAction, Provider<RenameFileAction> renameFileAction, DeleteAction deleteAction, Provider<ViewFileInfoAction> fileInfoAction) { this.selectedFiles = selectedFiles; this.selectedLocalFileList = selectedLocalFileList; this.selectedLocalFileItems = selectedLocalFileItems; this.listMenuFactory = listMenuFactory; this.launchAction = launchAction; this.renameFileAction = renameFileAction; this.locateAction = locateAction; this.removeFromListMenu = removeFromListMenu; this.removeFromListAction = removeFromListAction; this.deleteAction = deleteAction; this.fileInfoAction = fileInfoAction; init(); } private void init() { if(selectedLocalFileList.get() instanceof LibraryFileList) { initLibrary(); } else { initPlayList(); } } private void initLibrary() { List<LocalFileItem> localFileItem = new ArrayList<LocalFileItem>(selectedLocalFileItems.get()); // if single selection if(localFileItem.size() == 1) { add(launchAction.get()); addSeparator(); // add to list, show in list, remove from list add(listMenuFactory.createAddToListMenu(selectedFiles)); add(listMenuFactory.createShowInListMenu(selectedFiles, selectedLocalFileList, false)); add(removeFromListMenu.get()); addSeparator(); add(renameFileAction.get()).setEnabled(!localFileItem.get(0).isIncomplete()); add(locateAction.get()); add(deleteAction); addSeparator(); add(fileInfoAction.get()); } else { add(listMenuFactory.createAddToListMenu(selectedFiles)); add(removeFromListMenu.get()); addSeparator(); add(deleteAction); } } private void initPlayList() { List<LocalFileItem> localFileItem = new ArrayList<LocalFileItem>(selectedLocalFileItems.get()); // if single selection if(localFileItem.size() == 1) { add(launchAction.get()); addSeparator(); // add to list, show in list, remove from list add(listMenuFactory.createShowInListMenu(selectedFiles, selectedLocalFileList, true)); add(removeFromListAction.get()); addSeparator(); add(renameFileAction.get()).setEnabled(!localFileItem.get(0).isIncomplete()); add(locateAction.get()); add(deleteAction); addSeparator(); add(fileInfoAction.get()); } else { add(removeFromListAction.get()); addSeparator(); add(deleteAction); } } }