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.LocalFileItem;
import org.limewire.core.api.library.SharedFileList;
import org.limewire.core.api.library.SharedFileListManager;
import org.limewire.ui.swing.library.LibrarySelected;
import org.limewire.ui.swing.library.navigator.LibraryNavigatorPanel;
import org.limewire.ui.swing.library.navigator.LibraryNavItem.NavType;
import com.google.inject.Inject;
import com.google.inject.Provider;
public class LibraryPopupMenu extends JPopupMenu {
private final Provider<List<LocalFileItem>> selectedLocalFileItems;
private final SharedFileListManager sharedFileListManager;
private final LibraryNavigatorPanel libraryNavigatorPanel;
private final Provider<LaunchFileAction> launchAction;
private final Provider<RenameFileAction> renameFileAction;
private final Provider<LocateFileAction> locateAction;
private final Provider<RemoveFromListAction> removeListAction;
private final Provider<RemoveFromAllListAction> removeFromAllListAction;
private final Provider<LibraryAddToListMenu> addToListMenu;
private final Provider<LibraryShowInListMenu> showInListMenu;
private final RemoveFromLibraryAction removeAction;
private final DeleteAction deleteAction;
private final Provider<ViewFileInfoAction> fileInfoAction;
@Inject
public LibraryPopupMenu(@LibrarySelected Provider<List<LocalFileItem>> selectedLocalFileItems,
SharedFileListManager sharedFileListManager,
LibraryNavigatorPanel libraryNavigatorPanel, Provider<RemoveFromAllListAction> removeFromAllListAction,
Provider<LaunchFileAction> launchAction, Provider<LocateFileAction> locateAction,
RemoveFromLibraryAction removeAction, Provider<RenameFileAction> renameFileAction,
Provider<RemoveFromListAction> removeListAction,
Provider<LibraryAddToListMenu> addToListMenu,
Provider<LibraryShowInListMenu> showInListMenu,
DeleteAction deleteAction, Provider<ViewFileInfoAction> fileInfoAction) {
this.selectedLocalFileItems = selectedLocalFileItems;
this.sharedFileListManager = sharedFileListManager;
this.libraryNavigatorPanel = libraryNavigatorPanel;
this.launchAction = launchAction;
this.renameFileAction = renameFileAction;
this.locateAction = locateAction;
this.removeListAction = removeListAction;
this.removeFromAllListAction = removeFromAllListAction;
this.addToListMenu = addToListMenu;
this.showInListMenu = showInListMenu;
this.removeAction = removeAction;
this.deleteAction = deleteAction;
this.fileInfoAction = fileInfoAction;
init();
}
private void init() {
List<LocalFileItem> localFileItem = new ArrayList<LocalFileItem>(selectedLocalFileItems.get());
// if single selection
if(localFileItem.size() == 1) {
add(launchAction.get());
addSeparator();
add(addToListMenu.get());
if(libraryNavigatorPanel.getSelectedNavItem().getType() != NavType.LIBRARY) {
add(showInListMenu.get());
add(removeListAction.get());
} else {
add(showInListMenu.get());
add(removeFromAllListAction.get()).setEnabled(existsInAnyList(localFileItem.get(0).getFile()));
}
addSeparator();
add(renameFileAction.get()).setEnabled(!localFileItem.get(0).isIncomplete());
add(locateAction.get());
add(removeAction);
add(deleteAction);
addSeparator();
add(fileInfoAction.get());
} else {
add(addToListMenu.get());
if(libraryNavigatorPanel.getSelectedNavItem().getType() != NavType.LIBRARY) {
add(removeListAction.get());
} else {
add(removeFromAllListAction.get());
}
addSeparator();
add(removeAction);
add(deleteAction);
}
}
private boolean existsInAnyList(File file) {
boolean contains = false;
for(SharedFileList sharedFileList : sharedFileListManager.getModel()) {
if(sharedFileList.contains(file)) {
contains = true;
break;
}
}
return contains;
}
}