Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

File Browser JFace

/******************************************************************************  * All Right Reserved.   * Copyright (c) 1998, 2004 Jackwind Li Guojie  *   * Created on Mar 12, 2004 11:51:42 PM by JACK  * $Id$  *   *****************************************************************************/ import java.io.File; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; public class FileBrowserJFace {   Display display = new Display();   Shell shell = new Shell(display);      File rootDir;      TreeViewer treeViewer;   public FileBrowserJFace() {     Action actionSetRootDir = new Action("Set Root Dir") {       public void run() {         DirectoryDialog dialog = new DirectoryDialog(shell);         String path = dialog.open();         if (path != null) {           treeViewer.setInput(new File(path));         }       }     };          final ViewerFilter directoryFilter = new ViewerFilter() {       public boolean select(         Viewer viewer,         Object parentElement,         Object element) {         return ((File)element).isDirectory();       }     };          Action actionShowDirectoriesOnly = new Action("Show directories only") {       public void run() {         if(! isChecked())           treeViewer.removeFilter(directoryFilter);         else           treeViewer.addFilter(directoryFilter);       }     };     actionShowDirectoriesOnly.setChecked(false);     Action actionDeleteFile = new Action("Delete the selected file") {       public void run() {         IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection();         File file = (File)selection.getFirstElement();         if(file == null) {           System.out.println("Please select a file first.");           return;         }                  MessageBox messageBox = new MessageBox(shell, SWT.YES | SWT.NO);         messageBox.setMessage("Are you sure to delete file: " + file.getName() + "?");         if(messageBox.open() == SWT.YES) {           File parentFile = file.getParentFile();           if(file.delete()) {             System.out.println("File has been deleted. ");             // Notifies the viewer for update.              treeViewer.refresh(parentFile, false);           }else{             System.out.println("Unable to delete file.");           }         }                  }     };     ToolBar toolBar = new ToolBar(shell, SWT.FLAT);     ToolBarManager manager = new ToolBarManager(toolBar);     manager.add(actionSetRootDir);     manager.add(actionShowDirectoriesOnly);     manager.add(actionDeleteFile);     manager.update(true);             shell.setLayout(new GridLayout());     treeViewer = new TreeViewer(shell, SWT.BORDER);     treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));     // Sets the content provider.     treeViewer.setContentProvider(new ITreeContentProvider() {       public Object[] getChildren(Object parentElement) {         File[] files = ((File)parentElement).listFiles();         if(files == null)           return new Object[0];         return files;       }       public Object getParent(Object element) {         return ((File)element).getParentFile();       }       public boolean hasChildren(Object element) {         File file = (File)element;         File[] files = file.listFiles();         if(files == null || files.length == 0)           return false;         return true;       }       public Object[] getElements(Object inputElement) {         File[] files = ((File)inputElement).listFiles();         if(files == null)           return new Object[0];         return files;       }       public void dispose() {       }       public void inputChanged(         Viewer viewer,         Object oldInput,         Object newInput) {         shell.setText("Now browsing: " + newInput);       }     });          // Sets the label provider.      treeViewer.setLabelProvider(new LabelProvider() {       public Image getImage(Object element) {         return getIcon((File)element);       }       public String getText(Object element) {         return ((File)element).getName();       }     });          // Sorts the tree.      treeViewer.setSorter(new ViewerSorter() {       public int category(Object element) {         File file = (File)element;         if(file.isDirectory())           return 0;         else           return 1;       }     });               treeViewer.setInput(new File("C:/"));          shell.setSize(400, 260);     shell.open();     //textUser.forceFocus();     // Set up the event loop.     while (!shell.isDisposed()) {       if (!display.readAndDispatch()) {         // If no more entries in event queue         display.sleep();       }     }     display.dispose();   }   /**    * Renames a file.    *     * @param file    * @param newName    * @return the after after being renamed or <code>null</code> if renaming    *         fails.    */   private File renameFile(File file, String newName) {     File dest = new File(file.getParentFile(), newName);     if (file.renameTo(dest)) {       return dest;     } else {       return null;     }   }   private ImageRegistry imageRegistry;   Image iconFolder = new Image(shell.getDisplay(), "rntsoft.gif");   Image iconFile = new Image(shell.getDisplay(), "rntsoft.gif");   /**    * Returns an icon representing the specified file.    *     * @param file    * @return    */   private Image getIcon(File file) {     if (file.isDirectory())       return iconFolder;     int lastDotPos = file.getName().indexOf('.');     if (lastDotPos == -1)       return iconFile;     Image image = getIcon(file.getName().substring(lastDotPos + 1));     return image == null ? iconFile : image;   }   /**    * Returns the icon for the file type with the specified extension.    *     * @param extension    * @return    */   private Image getIcon(String extension) {     if (imageRegistry == null)       imageRegistry = new ImageRegistry();     Image image = imageRegistry.get(extension);     if (image != null)       return image;     Program program = Program.findProgram(extension);     ImageData imageData = (program == null ? null : program.getImageData());     if (imageData != null) {       image = new Image(shell.getDisplay(), imageData);       imageRegistry.put(extension, image);     } else {       image = iconFile;     }     return image;   }            public static void main(String[] args) {     new FileBrowserJFace();   } }