Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

Demonstrates CheckboxTableViewer

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /**  * This class demonstrates CheckboxTableViewer. It allows you to check files to  * copy, and copy them to a backup directory.  */ public class BackupFiles extends ApplicationWindow {   // Used to show status   private Label status;   /**    * BackupFiles constructor    */   public BackupFiles() {     super(null);   }   /**    * Runs the application    */   public void run() {     // Don't return from open() until window closes     setBlockOnOpen(true);     // Open the main window     open();     // Dispose the display     Display.getCurrent().dispose();   }   /**    * Configures the shell    *     * @param shell    *            the shell    */   protected void configureShell(Shell shell) {     super.configureShell(shell);     // Set the title bar text and the size     shell.setText("Backup Files");     shell.setSize(400, 400);   }   /**    * Creates the main window's contents    *     * @param parent    *            the main window    * @return Control    */   protected Control createContents(Composite parent) {     Composite composite = new Composite(parent, SWT.NONE);     composite.setLayout(new GridLayout(1, false));     // Create the source directory panel and its controls     final Text sourceDir = createFilePanelHelper(composite, "Source Dir:");     // Create the CheckboxTableViewer to display the files in the source dir     final CheckboxTableViewer ctv = CheckboxTableViewer.newCheckList(         composite, SWT.BORDER);     ctv.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));     ctv.setContentProvider(new BackupFilesContentProvider());     ctv.setLabelProvider(new BackupFilesLabelProvider());     // Create the destination directory panel and its controls     final Text destDir = createFilePanelHelper(composite, "Dest Dir:");     // Create the Copy button     Button copy = new Button(composite, SWT.PUSH);     copy.setText("Copy");     // Create the status field     status = new Label(composite, SWT.NONE);     status.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     // When the source directory changes, change the input for the viewer     sourceDir.addModifyListener(new ModifyListener() {       public void modifyText(ModifyEvent event) {         ctv.setInput(((Text) event.widget).getText());       }     });     // When copy is pressed, copy the files     copy.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         // Get the checked elements         Object[] files = ctv.getCheckedElements();         if (files.length > 0) {           // Some files are checked; make sure we have a valid           // destination           File dest = new File(destDir.getText());           if (dest.isDirectory()) {             // Go through each file             for (int i = 0, n = files.length; i < n; i++) {               copyFile((File) files[i], dest);             }           } else             showMessage("You must select a valid destination directory");         } else           showMessage("You must select some files to copy");       }     });     return composite;   }   /**    * Helper method to create the label/text/button for a directory    *     * @param composite    *            the parent composite    * @param label    *            the text for the label    * @return Text    */   private Text createFilePanelHelper(Composite composite, String label) {     // Create the composite to hold the controls     Composite panel = new Composite(composite, SWT.BORDER);     panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     panel.setLayout(new GridLayout(3, false));     // Create the controls     new Label(panel, SWT.LEFT).setText(label);     Text text = new Text(panel, SWT.BORDER);     text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     Button browse = new Button(panel, SWT.PUSH);     // Add browsing     browse.setText("...");     browse.addSelectionListener(new DirectoryBrowser(text));     // Return the Text that holds the directory     return text;   }   /**    * Copies a file    *     * @param file    *            the file to copy    * @param targetDir    *            the directory to copy to    */   private void copyFile(File file, File targetDir) {     BufferedInputStream in = null;     BufferedOutputStream out = null;     File destFile = new File(targetDir.getAbsolutePath() + File.separator         + file.getName());     try {       showMessage("Copying " + file.getName());       in = new BufferedInputStream(new FileInputStream(file));       out = new BufferedOutputStream(new FileOutputStream(destFile));       int n;       while ((n = in.read()) != -1) {         out.write(n);       }       showMessage("Copied " + file.getName());     } catch (Exception e) {       showMessage("Cannot copy file " + file.getAbsolutePath());     } finally {       if (in != null)         try {           in.close();         } catch (Exception e) {         }       if (out != null)         try {           out.close();         } catch (Exception e) {         }     }   }   /**    * Shows a message    *     * @param message    *            the message    */   private void showMessage(String message) {     status.setText(message);   }   /**    * The application entry point    *     * @param args    *            the command line arguments    */   public static void main(String[] args) {     new BackupFiles().run();   } } /**  * This class returns the files in the specified directory. If the specified  * directory doesn't exist, it returns an empty array.  */ class BackupFilesContentProvider implements IStructuredContentProvider {   private static final Object[] EMPTY = new Object[] {};   /**    * Gets the files in the specified directory    *     * @param arg0    *            a String containing the directory    */   public Object[] getElements(Object arg0) {     File file = new File((String) arg0);     if (file.isDirectory()) {       return file.listFiles(new FileFilter() {         public boolean accept(File pathName) {           // Ignore directories; return only files           return pathName.isFile();         }       });     }     return EMPTY;   }   /**    * Disposes any created resources    */   public void dispose() {     // Nothing to dispose   }   /**    * Called when the input changes    */   public void inputChanged(Viewer arg0, Object arg1, Object arg2) {     // Nothing to do   } } /**  * This class provides the labels for files  */ class BackupFilesLabelProvider implements ILabelProvider {   /**    * Returns the image    *     * @param arg0    *            the file    * @return Image    */   public Image getImage(Object arg0) {     return null;   }   /**    * Returns the name of the file    *     * @param arg0    *            the name of the file    * @return String    */   public String getText(Object arg0) {     return ((File) arg0).getName();   }   /**    * Adds a listener    *     * @param arg0    *            the listener    */   public void addListener(ILabelProviderListener arg0) {     // Throw it away   }   /**    * Disposes any created resources    */   public void dispose() {     // Nothing to dispose   }   /**    * Returns whether changing this property for this element affects the label    *     * @param arg0    *            the element    * @param arg1    *            the property    */   public boolean isLabelProperty(Object arg0, String arg1) {     return false;   }   /**    * Removes a listener    *     * @param arg0    *            the listener    */   public void removeListener(ILabelProviderListener arg0) {     // Ignore   } } /**  * This class allows users to browse for a directory  */ class DirectoryBrowser extends SelectionAdapter {   // The Text this browser is tied to   private Text text;   /**    * DirectoryBrowser constructor    *     * @param text    */   public DirectoryBrowser(Text text) {     this.text = text;   }   /**    * Called when the browse button is pushed    *     * @param event    *            the generated event    */   public void widgetSelected(SelectionEvent event) {     DirectoryDialog dlg = new DirectoryDialog(Display.getCurrent()         .getActiveShell());     dlg.setFilterPath(text.getText());     String dir = dlg.open();     if (dir != null) {       text.setText(dir);     }   } }