package edu.mbl.jif.imaging.nav.dirtree; import edu.mbl.jif.imaging.nav.ImageNavigator; import java.awt.Point; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.*; import java.io.File; import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; import javax.swing.tree.*; /* * The Popup Menu that appears on nodes in the directory tree. */ @SuppressWarnings("serial") public class PopupMenuTree extends JPopupMenu { private JTree tree; private DefaultTreeModel treeModel; private DefaultMutableTreeNode lastSelNode, curNode; private JMenuItem menuItem; private boolean cut; private final ImageNavigator imageNavigator; public PopupMenuTree(ImageNavigator imgNav) { this.imageNavigator = imgNav; // // TODO: These file/directory operations could be added // add(menuItem = new JMenuItem("Rename")); // menuItem.setIcon(new ImageIcon("edit.png")); // menuItem.addActionListener(new ActionListener() { // public void actionPerformed(ActionEvent ae) { // String str = curNode.toString(); // str = str.substring(str.lastIndexOf("\\") + 1, str.length()); // if (JOptionPane.showConfirmDialog(tree, "Rename " + str, "Rename", // JOptionPane.ERROR_MESSAGE) == JOptionPane.YES_OPTION) { // String reply = JOptionPane.showInputDialog(null, "Rename " + str); // if (reply != "" && reply != null) { // str = curNode.toString(); // str = str.substring(0, str.lastIndexOf("\\")); // ((File) curNode.getUserObject()).renameTo(new File(str + "\\" + reply)); // curNode.setUserObject(new File(str + "\\" + reply)); // } // } // } // }); // add(menuItem = new JMenuItem("Delete")); // menuItem.setIcon(new ImageIcon("delete.png")); // menuItem.addActionListener(new ActionListener() { // public void actionPerformed(ActionEvent ae) { // if (JOptionPane.showConfirmDialog(tree, "Delete " + curNode, "Delete File", // JOptionPane.ERROR_MESSAGE) == JOptionPane.YES_OPTION) { // if (((File) curNode.getUserObject()).isFile()) { // ((File) curNode.getUserObject()).delete(); // } else { // delDir((File) curNode.getUserObject()); // } // treeModel = (DefaultTreeModel) tree.getModel(); // treeModel.removeNodeFromParent(curNode); // } // } // }); // addSeparator(); // add(menuItem = new JMenuItem("Cut")); // menuItem.setIcon(new ImageIcon("cut.png")); // menuItem.addActionListener(new ActionListener() { // public void actionPerformed(ActionEvent ae) { // lastSelNode = curNode; // cut = true; // } // }); // // // add(menuItem = new JMenuItem("Copy")); // menuItem.setIcon(new ImageIcon("copy.png")); // menuItem.addActionListener(new ActionListener() { // public void actionPerformed(ActionEvent ae) { // lastSelNode = curNode; // cut = false; // } // }); // add(menuItem = new JMenuItem("Paste")); // menuItem.setIcon(new ImageIcon("paste.png")); // menuItem.addActionListener(new ActionListener() { // public void actionPerformed(ActionEvent ae) { // String str = lastSelNode.toString(); // str = str.substring(str.lastIndexOf("\\") + 1, str.length()); // ExecutorService threadExecutor = Executors.newFixedThreadPool(1); // threadExecutor.execute(new CopyDialog((File) lastSelNode.getUserObject(), // new File(curNode.toString() + "\\" + str), cut)); // threadExecutor.shutdown(); // DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel(); // DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(new File( // ((MutableTreeNode) tree.getLastSelectedPathComponent()).toString() + "\\" + str)); // if (lastSelNode.getChildCount() != 0) { // newNode.add(new DefaultMutableTreeNode("**")); // } // treeModel.insertNodeInto(newNode, (MutableTreeNode) tree.getLastSelectedPathComponent(), 0); // if (cut) { // treeModel.removeNodeFromParent(lastSelNode); // } // tree.repaint(); // } // }); add(menuItem = new JMenuItem("Set as top directory")); //menuItem.setIcon(new ImageIcon("copy.png")); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { //String str = curNode.toString(); String str = ((File) curNode.getUserObject()).getAbsolutePath(); PopupMenuTree.this.imageNavigator.setDefaultTopPath(str,true); } }); // add(menuItem = new JMenuItem("Add to Favorites")); //menuItem.setIcon(new ImageIcon("copy.png")); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { //String str = curNode.toString(); String str = ((File) curNode.getUserObject()).getAbsolutePath(); PopupMenuTree.this.imageNavigator.addToFavoritePaths(str); } }); add(menuItem = new JMenuItem("Open in Explorer")); //menuItem.setIcon(new ImageIcon("copy.png")); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { try { String path = ((File) curNode.getUserObject()).getAbsolutePath(); java.awt.Desktop.getDesktop().open(new java.io.File(path)); } catch (IOException ex) { Logger.getLogger(PopupMenuTree.class.getName()).log(Level.SEVERE, null, ex); } } }); add(menuItem = new JMenuItem("Copy path")); //menuItem.setIcon(new ImageIcon("copy.png")); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { //String str = curNode.toString(); String str = ((File) curNode.getUserObject()).getAbsolutePath(); StringSelection stringSelection = new StringSelection(str); Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); clpbrd.setContents(stringSelection, null); } }); } // Show the popup menu public void show(JTree comp, Point p, DefaultMutableTreeNode node) { if (comp != null & p != null & node != null) { curNode = node; tree = comp; show(comp, p.x, p.y); // TODO: enable based on selection // if (lastSelNode != null & ((File) node.getUserObject()).isDirectory()) { // if (!lastSelNode.isNodeDescendant(curNode)) { // menuItem.setEnabled(true); // } // } else { // menuItem.setEnabled(false); // } } } public static void delDir(File dir) { if (dir.isDirectory()) { File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { delDir(files[i]); files[i].delete(); } else { files[i].delete(); } } dir.delete(); } if (dir.exists()) { delDir(dir); } } }