mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			1438 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			1438 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* BasicFileChooserUI.java --
 | |
|    Copyright (C) 2005  Free Software Foundation, Inc.
 | |
| 
 | |
| This file is part of GNU Classpath.
 | |
| 
 | |
| GNU Classpath is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation; either version 2, or (at your option)
 | |
| any later version.
 | |
| 
 | |
| GNU Classpath is distributed in the hope that it will be useful, but
 | |
| WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
| General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with GNU Classpath; see the file COPYING.  If not, write to the
 | |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
| 02110-1301 USA.
 | |
| 
 | |
| Linking this library statically or dynamically with other modules is
 | |
| making a combined work based on this library.  Thus, the terms and
 | |
| conditions of the GNU General Public License cover the whole
 | |
| combination.
 | |
| 
 | |
| As a special exception, the copyright holders of this library give you
 | |
| permission to link this library with independent modules to produce an
 | |
| executable, regardless of the license terms of these independent
 | |
| modules, and to copy and distribute the resulting executable under
 | |
| terms of your choice, provided that you also meet, for each linked
 | |
| independent module, the terms and conditions of the license of that
 | |
| module.  An independent module is a module which is not derived from
 | |
| or based on this library.  If you modify this library, you may extend
 | |
| this exception to your version of the library, but you are not
 | |
| obligated to do so.  If you do not wish to do so, delete this
 | |
| exception statement from your version. */
 | |
| 
 | |
| package javax.swing.plaf.basic;
 | |
| 
 | |
| import java.awt.Window;
 | |
| import java.awt.event.ActionEvent;
 | |
| import java.awt.event.MouseAdapter;
 | |
| import java.awt.event.MouseEvent;
 | |
| import java.awt.event.MouseListener;
 | |
| import java.beans.PropertyChangeListener;
 | |
| import java.io.File;
 | |
| import java.io.IOException;
 | |
| import java.util.ArrayList;
 | |
| import java.util.Hashtable;
 | |
| 
 | |
| import javax.swing.AbstractAction;
 | |
| import javax.swing.Action;
 | |
| import javax.swing.Icon;
 | |
| import javax.swing.JButton;
 | |
| import javax.swing.JComponent;
 | |
| import javax.swing.JDialog;
 | |
| import javax.swing.JFileChooser;
 | |
| import javax.swing.JList;
 | |
| import javax.swing.JPanel;
 | |
| import javax.swing.JTextField;
 | |
| import javax.swing.SwingUtilities;
 | |
| import javax.swing.UIDefaults;
 | |
| import javax.swing.UIManager;
 | |
| import javax.swing.event.ListSelectionEvent;
 | |
| import javax.swing.event.ListSelectionListener;
 | |
| import javax.swing.filechooser.FileFilter;
 | |
| import javax.swing.filechooser.FileSystemView;
 | |
| import javax.swing.filechooser.FileView;
 | |
| import javax.swing.plaf.ComponentUI;
 | |
| import javax.swing.plaf.FileChooserUI;
 | |
| import javax.swing.plaf.metal.MetalIconFactory;
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * A UI delegate for the {@link JFileChooser} component under the
 | |
|  * {@link BasicLookAndFeel}.
 | |
|  */
 | |
| public class BasicFileChooserUI extends FileChooserUI
 | |
| {
 | |
|   /**
 | |
|    * A file filter that accepts all files.
 | |
|    */
 | |
|   protected class AcceptAllFileFilter extends FileFilter
 | |
|   {
 | |
|     /**
 | |
|      * Creates a new instance.
 | |
|      */
 | |
|     public AcceptAllFileFilter()
 | |
|     {
 | |
|       // Nothing to do here.
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns <code>true</code> always, as all files are accepted by this
 | |
|      * filter.
 | |
|      *
 | |
|      * @param f  the file.
 | |
|      *
 | |
|      * @return Always <code>true</code>.
 | |
|      */
 | |
|     public boolean accept(File f)
 | |
|     {
 | |
|       return true;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns a description for this filter.
 | |
|      *
 | |
|      * @return A description for the file filter.
 | |
|      */
 | |
|     public String getDescription()
 | |
|     {
 | |
|       return acceptAllFileFilterText;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Handles a user action to approve the dialog selection.
 | |
|    *
 | |
|    * @see BasicFileChooserUI#getApproveSelectionAction()
 | |
|    */
 | |
|   protected class ApproveSelectionAction extends AbstractAction
 | |
|   {
 | |
|     /**
 | |
|      * Creates a new ApproveSelectionAction object.
 | |
|      */
 | |
|     protected ApproveSelectionAction()
 | |
|     {
 | |
|       super("approveSelection");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Sets the current selection and closes the dialog.
 | |
|      *
 | |
|      * @param e  the action event.
 | |
|      */
 | |
|     public void actionPerformed(ActionEvent e)
 | |
|     {
 | |
|       Object obj = null;
 | |
|       if (parentPath != null)
 | |
|         obj = new String(parentPath + getFileName());
 | |
|       else
 | |
|         obj = filechooser.getSelectedFile();
 | |
|       if (obj != null)
 | |
|         {
 | |
|           File f = filechooser.getFileSystemView().createFileObject(obj.toString());
 | |
|           File currSelected = filechooser.getSelectedFile();
 | |
|           if (filechooser.isTraversable(f))
 | |
|             {
 | |
|               filechooser.setCurrentDirectory(currSelected);
 | |
|               filechooser.rescanCurrentDirectory();
 | |
|             }
 | |
|           else
 | |
|             {
 | |
|               filechooser.approveSelection();
 | |
|               closeDialog();
 | |
|             }
 | |
|         }
 | |
|       else
 | |
|         {
 | |
|           File f = new File(filechooser.getCurrentDirectory(), getFileName());
 | |
|           if ( selectedDir != null )
 | |
|             f = selectedDir;
 | |
|           if (filechooser.isTraversable(f))
 | |
|             {
 | |
|               filechooser.setCurrentDirectory(f);
 | |
|               filechooser.rescanCurrentDirectory();
 | |
|             }
 | |
|           else
 | |
|             {
 | |
|               filechooser.setSelectedFile(f);
 | |
|               filechooser.approveSelection();
 | |
|               closeDialog();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Provides presentation information about files and directories.
 | |
|    */
 | |
|   protected class BasicFileView extends FileView
 | |
|   {
 | |
|     /** Storage for cached icons. */
 | |
|     protected Hashtable<File, Icon> iconCache = new Hashtable<File, Icon>();
 | |
| 
 | |
|     /**
 | |
|      * Creates a new instance.
 | |
|      */
 | |
|     public BasicFileView()
 | |
|     {
 | |
|       // Nothing to do here.
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Adds an icon to the cache, associating it with the given file/directory.
 | |
|      *
 | |
|      * @param f  the file/directory.
 | |
|      * @param i  the icon.
 | |
|      */
 | |
|     public void cacheIcon(File f, Icon i)
 | |
|     {
 | |
|       iconCache.put(f, i);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Clears the icon cache.
 | |
|      */
 | |
|     public void clearIconCache()
 | |
|     {
 | |
|       iconCache.clear();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Retrieves the icon associated with the specified file/directory, if
 | |
|      * there is one.
 | |
|      *
 | |
|      * @param f  the file/directory.
 | |
|      *
 | |
|      * @return The cached icon (or <code>null</code>).
 | |
|      */
 | |
|     public Icon getCachedIcon(File f)
 | |
|     {
 | |
|       return (Icon) iconCache.get(f);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns a description of the given file/directory.  In this
 | |
|      * implementation, the description is the same as the name returned by
 | |
|      * {@link #getName(File)}.
 | |
|      *
 | |
|      * @param f  the file/directory.
 | |
|      *
 | |
|      * @return A description of the given file/directory.
 | |
|      */
 | |
|     public String getDescription(File f)
 | |
|     {
 | |
|       return getName(f);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns an icon appropriate for the given file or directory.
 | |
|      *
 | |
|      * @param f  the file/directory.
 | |
|      *
 | |
|      * @return An icon.
 | |
|      */
 | |
|     public Icon getIcon(File f)
 | |
|     {
 | |
|       Icon val = getCachedIcon(f);
 | |
|       if (val != null)
 | |
|         return val;
 | |
|       if (filechooser.isTraversable(f))
 | |
|         val = directoryIcon;
 | |
|       else
 | |
|         val = fileIcon;
 | |
|       cacheIcon(f, val);
 | |
|       return val;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns the name for the given file/directory.
 | |
|      *
 | |
|      * @param f  the file/directory.
 | |
|      *
 | |
|      * @return The name of the file/directory.
 | |
|      */
 | |
|     public String getName(File f)
 | |
|     {
 | |
|       String name = null;
 | |
|       if (f != null)
 | |
|         {
 | |
|           JFileChooser c = getFileChooser();
 | |
|           FileSystemView v = c.getFileSystemView();
 | |
|           name = v.getSystemDisplayName(f);
 | |
|         }
 | |
|       return name;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns a localised description for the type of file/directory.
 | |
|      *
 | |
|      * @param f  the file/directory.
 | |
|      *
 | |
|      * @return A type description for the given file/directory.
 | |
|      */
 | |
|     public String getTypeDescription(File f)
 | |
|     {
 | |
|       if (filechooser.isTraversable(f))
 | |
|         return dirDescText;
 | |
|       else
 | |
|         return fileDescText;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns {@link Boolean#TRUE} if the given file/directory is hidden,
 | |
|      * and {@link Boolean#FALSE} otherwise.
 | |
|      *
 | |
|      * @param f  the file/directory.
 | |
|      *
 | |
|      * @return {@link Boolean#TRUE} or {@link Boolean#FALSE}.
 | |
|      */
 | |
|     public Boolean isHidden(File f)
 | |
|     {
 | |
|       return Boolean.valueOf(filechooser.getFileSystemView().isHiddenFile(f));
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Handles an action to cancel the file chooser.
 | |
|    *
 | |
|    * @see BasicFileChooserUI#getCancelSelectionAction()
 | |
|    */
 | |
|   protected class CancelSelectionAction extends AbstractAction
 | |
|   {
 | |
|     /**
 | |
|      * Creates a new <code>CancelSelectionAction</code> object.
 | |
|      */
 | |
|     protected CancelSelectionAction()
 | |
|     {
 | |
|       super(null);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Cancels the selection and closes the dialog.
 | |
|      *
 | |
|      * @param e  the action event (ignored).
 | |
|      */
 | |
|     public void actionPerformed(ActionEvent e)
 | |
|     {
 | |
|       filechooser.setSelectedFile(null);
 | |
|       filechooser.setSelectedFiles(null);
 | |
|       filechooser.cancelSelection();
 | |
|       closeDialog();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * An action to handle changes to the parent directory (for example, via
 | |
|    * a click on the "up folder" button).
 | |
|    *
 | |
|    * @see BasicFileChooserUI#getChangeToParentDirectoryAction()
 | |
|    */
 | |
|   protected class ChangeToParentDirectoryAction extends AbstractAction
 | |
|   {
 | |
|     /**
 | |
|      * Creates a new <code>ChangeToParentDirectoryAction</code> object.
 | |
|      */
 | |
|     protected ChangeToParentDirectoryAction()
 | |
|     {
 | |
|       super("Go Up");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Handles the action event.
 | |
|      *
 | |
|      * @param e  the action event.
 | |
|      */
 | |
|     public void actionPerformed(ActionEvent e)
 | |
|     {
 | |
|       filechooser.changeToParentDirectory();
 | |
|       filechooser.revalidate();
 | |
|       filechooser.repaint();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * A mouse listener that handles double-click events.
 | |
|    *
 | |
|    * @see BasicFileChooserUI#createDoubleClickListener(JFileChooser, JList)
 | |
|    */
 | |
|   protected class DoubleClickListener extends MouseAdapter
 | |
|   {
 | |
| 
 | |
|     /** DOCUMENT ME! */
 | |
|     private Object lastSelected;
 | |
| 
 | |
|     /** DOCUMENT ME! */
 | |
|     private JList list;
 | |
| 
 | |
|     /**
 | |
|      * Creates a new DoubleClickListener object.
 | |
|      *
 | |
|      * @param list DOCUMENT ME!
 | |
|      */
 | |
|     public DoubleClickListener(JList list)
 | |
|     {
 | |
|       this.list = list;
 | |
|       lastSelected = list.getSelectedValue();
 | |
|       setDirectorySelected(false);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Handles a mouse click event.
 | |
|      *
 | |
|      * @param e  the event.
 | |
|      */
 | |
|     public void mouseClicked(MouseEvent e)
 | |
|     {
 | |
|       Object p = list.getSelectedValue();
 | |
|       if (p == null)
 | |
|         return;
 | |
|       FileSystemView fsv = filechooser.getFileSystemView();
 | |
|       if (e.getClickCount() >= 2 && lastSelected != null &&
 | |
|           p.toString().equals(lastSelected.toString()))
 | |
|         {
 | |
|           File f = fsv.createFileObject(lastSelected.toString());
 | |
|           if (filechooser.isTraversable(f))
 | |
|             {
 | |
|               filechooser.setCurrentDirectory(f);
 | |
|               filechooser.rescanCurrentDirectory();
 | |
|             }
 | |
|           else
 | |
|             {
 | |
|               filechooser.setSelectedFile(f);
 | |
|               filechooser.approveSelection();
 | |
|               closeDialog();
 | |
|             }
 | |
|         }
 | |
|       else // single click
 | |
|         {
 | |
|           String path = p.toString();
 | |
|           File f = fsv.createFileObject(path);
 | |
|           filechooser.setSelectedFile(f);
 | |
| 
 | |
|           if (filechooser.isMultiSelectionEnabled())
 | |
|             {
 | |
|               int[] inds = list.getSelectedIndices();
 | |
|               File[] allFiles = new File[inds.length];
 | |
|               for (int i = 0; i < inds.length; i++)
 | |
|                 allFiles[i] = (File) list.getModel().getElementAt(inds[i]);
 | |
|               filechooser.setSelectedFiles(allFiles);
 | |
|             }
 | |
| 
 | |
|           if (filechooser.isTraversable(f))
 | |
|             {
 | |
|               setDirectorySelected(true);
 | |
|               setDirectory(f);
 | |
|             }
 | |
|           else
 | |
|             {
 | |
|               setDirectorySelected(false);
 | |
|               setDirectory(null);
 | |
|             }
 | |
|           lastSelected = path;
 | |
|           parentPath = f.getParent();
 | |
| 
 | |
|           if (f.isFile())
 | |
|             setFileName(f.getName());
 | |
|           else if (filechooser.getFileSelectionMode() !=
 | |
|                    JFileChooser.FILES_ONLY)
 | |
|             setFileName(path);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Handles a mouse entered event (NOT IMPLEMENTED).
 | |
|      *
 | |
|      * @param e  the mouse event.
 | |
|      */
 | |
|     public void mouseEntered(MouseEvent e)
 | |
|     {
 | |
|       // FIXME: Implement
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * An action that changes the file chooser to display the user's home
 | |
|    * directory.
 | |
|    *
 | |
|    * @see BasicFileChooserUI#getGoHomeAction()
 | |
|    */
 | |
|   protected class GoHomeAction extends AbstractAction
 | |
|   {
 | |
|     /**
 | |
|      * Creates a new <code>GoHomeAction</code> object.
 | |
|      */
 | |
|     protected GoHomeAction()
 | |
|     {
 | |
|       super("Go Home");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Sets the directory to the user's home directory, and repaints the
 | |
|      * file chooser component.
 | |
|      *
 | |
|      * @param e  the action event (ignored).
 | |
|      */
 | |
|     public void actionPerformed(ActionEvent e)
 | |
|     {
 | |
|       filechooser.setCurrentDirectory(filechooser.getFileSystemView()
 | |
|                                                  .getHomeDirectory());
 | |
|       filechooser.revalidate();
 | |
|       filechooser.repaint();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * An action that handles the creation of a new folder/directory.
 | |
|    *
 | |
|    * @see BasicFileChooserUI#getNewFolderAction()
 | |
|    */
 | |
|   protected class NewFolderAction extends AbstractAction
 | |
|   {
 | |
|     /**
 | |
|      * Creates a new <code>NewFolderAction</code> object.
 | |
|      */
 | |
|     protected NewFolderAction()
 | |
|     {
 | |
|       super("New Folder");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Handles the event by creating a new folder.
 | |
|      *
 | |
|      * @param e  the action event (ignored).
 | |
|      */
 | |
|     public void actionPerformed(ActionEvent e)
 | |
|     {
 | |
|       try
 | |
|         {
 | |
|           filechooser.getFileSystemView().createNewFolder(filechooser
 | |
|                                                           .getCurrentDirectory());
 | |
|         }
 | |
|       catch (IOException ioe)
 | |
|         {
 | |
|           return;
 | |
|         }
 | |
|       filechooser.rescanCurrentDirectory();
 | |
|       filechooser.repaint();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * A listener for selection events in the file list.
 | |
|    *
 | |
|    * @see BasicFileChooserUI#createListSelectionListener(JFileChooser)
 | |
|    */
 | |
|   protected class SelectionListener implements ListSelectionListener
 | |
|   {
 | |
|     /**
 | |
|      * Creates a new <code>SelectionListener</code> object.
 | |
|      */
 | |
|     protected SelectionListener()
 | |
|     {
 | |
|       // Nothing to do here.
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Sets the JFileChooser to the selected file on an update
 | |
|      *
 | |
|      * @param e DOCUMENT ME!
 | |
|      */
 | |
|     public void valueChanged(ListSelectionEvent e)
 | |
|     {
 | |
|       JList list = (JList) e.getSource();
 | |
|       Object f = list.getSelectedValue();
 | |
|       if (f == null)
 | |
|         return;
 | |
|       File file = filechooser.getFileSystemView().createFileObject(f.toString());
 | |
|       if (! filechooser.isTraversable(file))
 | |
|         {
 | |
|           selectedDir = null;
 | |
|           filechooser.setSelectedFile(file);
 | |
|         }
 | |
|       else
 | |
|         {
 | |
|           selectedDir = file;
 | |
|           filechooser.setSelectedFile(null);
 | |
|         }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * DOCUMENT ME!
 | |
|    *
 | |
|    * @see BasicFileChooserUI#getUpdateAction()
 | |
|    */
 | |
|   protected class UpdateAction extends AbstractAction
 | |
|   {
 | |
|     /**
 | |
|      * Creates a new UpdateAction object.
 | |
|      */
 | |
|     protected UpdateAction()
 | |
|     {
 | |
|       super(null);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * NOT YET IMPLEMENTED.
 | |
|      *
 | |
|      * @param e  the action event.
 | |
|      */
 | |
|     public void actionPerformed(ActionEvent e)
 | |
|     {
 | |
|       // FIXME: implement this
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /** The localised mnemonic for the cancel button. */
 | |
|   protected int cancelButtonMnemonic;
 | |
| 
 | |
|   /** The localised text for the cancel button. */
 | |
|   protected String cancelButtonText;
 | |
| 
 | |
|   /** The localised tool tip text for the cancel button. */
 | |
|   protected String cancelButtonToolTipText;
 | |
| 
 | |
|   /** An icon representing a computer. */
 | |
|   protected Icon computerIcon;
 | |
| 
 | |
|   /** An icon for the "details view" button. */
 | |
|   protected Icon detailsViewIcon;
 | |
| 
 | |
|   /** An icon representing a directory. */
 | |
|   protected Icon directoryIcon;
 | |
| 
 | |
|   /** The localised Mnemonic for the open button. */
 | |
|   protected int directoryOpenButtonMnemonic;
 | |
| 
 | |
|   /** The localised text for the open button. */
 | |
|   protected String directoryOpenButtonText;
 | |
| 
 | |
|   /** The localised tool tip text for the open button. */
 | |
|   protected String directoryOpenButtonToolTipText;
 | |
| 
 | |
|   /** An icon representing a file. */
 | |
|   protected Icon fileIcon;
 | |
| 
 | |
|   /** An icon representing a floppy drive. */
 | |
|   protected Icon floppyDriveIcon;
 | |
| 
 | |
|   /** An icon representing a hard drive. */
 | |
|   protected Icon hardDriveIcon;
 | |
| 
 | |
|   /** The localised mnemonic for the "help" button. */
 | |
|   protected int helpButtonMnemonic;
 | |
| 
 | |
|   /** The localised text for the "help" button. */
 | |
|   protected String helpButtonText;
 | |
| 
 | |
|   /** The localised tool tip text for the help button. */
 | |
|   protected String helpButtonToolTipText;
 | |
| 
 | |
|   /** An icon representing the user's home folder. */
 | |
|   protected Icon homeFolderIcon;
 | |
| 
 | |
|   /** An icon for the "list view" button. */
 | |
|   protected Icon listViewIcon;
 | |
| 
 | |
|   /** An icon for the "new folder" button. */
 | |
|   protected Icon newFolderIcon = directoryIcon;
 | |
| 
 | |
|   /** The localised mnemonic for the "open" button. */
 | |
|   protected int openButtonMnemonic;
 | |
| 
 | |
|   /** The localised text for the "open" button. */
 | |
|   protected String openButtonText;
 | |
| 
 | |
|   /** The localised tool tip text for the "open" button. */
 | |
|   protected String openButtonToolTipText;
 | |
| 
 | |
|   /** The localised mnemonic for the "save" button. */
 | |
|   protected int saveButtonMnemonic;
 | |
| 
 | |
|   /** The localised text for the "save" button. */
 | |
|   protected String saveButtonText;
 | |
| 
 | |
|   /** The localised tool tip text for the save button. */
 | |
|   protected String saveButtonToolTipText;
 | |
| 
 | |
|   /** The localised mnemonic for the "update" button. */
 | |
|   protected int updateButtonMnemonic;
 | |
| 
 | |
|   /** The localised text for the "update" button. */
 | |
|   protected String updateButtonText;
 | |
| 
 | |
|   /** The localised tool tip text for the "update" button. */
 | |
|   protected String updateButtonToolTipText;
 | |
| 
 | |
|   /** An icon for the "up folder" button. */
 | |
|   protected Icon upFolderIcon;
 | |
| 
 | |
|   // -- begin private, but package local since used in inner classes --
 | |
| 
 | |
|   /** The file chooser component represented by this UI delegate. */
 | |
|   JFileChooser filechooser;
 | |
| 
 | |
|   /** The model for the directory list. */
 | |
|   BasicDirectoryModel model;
 | |
| 
 | |
|   /** The file filter for all files. */
 | |
|   FileFilter acceptAll = new AcceptAllFileFilter();
 | |
| 
 | |
|   /** The default file view. */
 | |
|   FileView fv = new BasicFileView();
 | |
| 
 | |
|   /** The accept (open/save) button. */
 | |
|   JButton accept;
 | |
| 
 | |
|   /** An optional accessory panel. */
 | |
|   JPanel accessoryPanel = new JPanel();
 | |
| 
 | |
|   /** A property change listener. */
 | |
|   PropertyChangeListener propertyChangeListener;
 | |
| 
 | |
|   /** The text describing the filter for "all files". */
 | |
|   String acceptAllFileFilterText;
 | |
| 
 | |
|   /** The text describing a directory type. */
 | |
|   String dirDescText;
 | |
| 
 | |
|   /** The text describing a file type. */
 | |
|   String fileDescText;
 | |
| 
 | |
|   /** Is a directory selected? */
 | |
|   boolean dirSelected;
 | |
| 
 | |
|   /** The current directory. */
 | |
|   File currDir;
 | |
| 
 | |
|   // FIXME: describe what is contained in the bottom panel
 | |
|   /** The bottom panel. */
 | |
|   JPanel bottomPanel;
 | |
| 
 | |
|   /** The close panel. */
 | |
|   JPanel closePanel;
 | |
| 
 | |
|   /** Text box that displays file name */
 | |
|   JTextField entry;
 | |
| 
 | |
|   /** Current parent path */
 | |
|   String parentPath;
 | |
| 
 | |
|   /**
 | |
|    * The action for the 'approve' button.
 | |
|    * @see #getApproveSelectionAction()
 | |
|    */
 | |
|   private ApproveSelectionAction approveSelectionAction;
 | |
| 
 | |
|   /**
 | |
|    * The action for the 'cancel' button.
 | |
|    * @see #getCancelSelectionAction()
 | |
|    */
 | |
|   private CancelSelectionAction cancelSelectionAction;
 | |
| 
 | |
|   /**
 | |
|    * The action for the 'go home' control button.
 | |
|    * @see #getGoHomeAction()
 | |
|    */
 | |
|   private GoHomeAction goHomeAction;
 | |
| 
 | |
|   /**
 | |
|    * The action for the 'up folder' control button.
 | |
|    * @see #getChangeToParentDirectoryAction()
 | |
|    */
 | |
|   private ChangeToParentDirectoryAction changeToParentDirectoryAction;
 | |
| 
 | |
|   /**
 | |
|    * The action for the 'new folder' control button.
 | |
|    * @see #getNewFolderAction()
 | |
|    */
 | |
|   private NewFolderAction newFolderAction;
 | |
| 
 | |
|   /**
 | |
|    * The action for ???.  // FIXME: what is this?
 | |
|    * @see #getUpdateAction()
 | |
|    */
 | |
|   private UpdateAction updateAction;
 | |
| 
 | |
|   /**
 | |
|    * When in FILES_ONLY, mode a directory cannot be selected, so
 | |
|    * we save a reference to any it here. This is used to enter
 | |
|    * the directory on "Open" when in that mode.
 | |
|    */
 | |
|   private File selectedDir;
 | |
| 
 | |
|   // -- end private --
 | |
| 
 | |
|   /**
 | |
|    * Closes the dialog.
 | |
|    */
 | |
|   void closeDialog()
 | |
|   {
 | |
|     Window owner = SwingUtilities.windowForComponent(filechooser);
 | |
|     if (owner instanceof JDialog)
 | |
|       ((JDialog) owner).dispose();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new <code>BasicFileChooserUI</code> object.
 | |
|    *
 | |
|    * @param b  the file chooser component.
 | |
|    */
 | |
|   public BasicFileChooserUI(JFileChooser b)
 | |
|   {
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns a UI delegate for the given component.
 | |
|    *
 | |
|    * @param c  the component (should be a {@link JFileChooser}).
 | |
|    *
 | |
|    * @return A new UI delegate.
 | |
|    */
 | |
|   public static ComponentUI createUI(JComponent c)
 | |
|   {
 | |
|     return new BasicFileChooserUI((JFileChooser) c);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Installs the UI for the specified component.
 | |
|    *
 | |
|    * @param c  the component (should be a {@link JFileChooser}).
 | |
|    */
 | |
|   public void installUI(JComponent c)
 | |
|   {
 | |
|     if (c instanceof JFileChooser)
 | |
|       {
 | |
|         JFileChooser fc = (JFileChooser) c;
 | |
|         this.filechooser = fc;
 | |
|         fc.resetChoosableFileFilters();
 | |
|         createModel();
 | |
|         clearIconCache();
 | |
|         installDefaults(fc);
 | |
|         installComponents(fc);
 | |
|         installListeners(fc);
 | |
| 
 | |
|         File path = filechooser.getCurrentDirectory();
 | |
|         if (path != null)
 | |
|           parentPath = path.getParent();
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Uninstalls this UI from the given component.
 | |
|    *
 | |
|    * @param c  the component (should be a {@link JFileChooser}).
 | |
|    */
 | |
|   public void uninstallUI(JComponent c)
 | |
|   {
 | |
|     model = null;
 | |
|     uninstallListeners(filechooser);
 | |
|     uninstallComponents(filechooser);
 | |
|     uninstallDefaults(filechooser);
 | |
|     filechooser = null;
 | |
|   }
 | |
| 
 | |
|   // FIXME: Indent the entries in the combobox
 | |
|   // Made this method package private to access it from within inner classes
 | |
|   // with better performance
 | |
|   void boxEntries()
 | |
|   {
 | |
|     ArrayList parentFiles = new ArrayList();
 | |
|     File parent = filechooser.getCurrentDirectory();
 | |
|     if (parent == null)
 | |
|       parent = filechooser.getFileSystemView().getDefaultDirectory();
 | |
|     while (parent != null)
 | |
|       {
 | |
|         String name = parent.getName();
 | |
|         if (name.equals(""))
 | |
|           name = parent.getAbsolutePath();
 | |
| 
 | |
|         parentFiles.add(parentFiles.size(), name);
 | |
|         parent = parent.getParentFile();
 | |
|       }
 | |
| 
 | |
|     if (parentFiles.size() == 0)
 | |
|       return;
 | |
| 
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates and install the subcomponents for the file chooser.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   public void installComponents(JFileChooser fc)
 | |
|   {
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Uninstalls the components from the file chooser.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   public void uninstallComponents(JFileChooser fc)
 | |
|   {
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Installs the listeners required by this UI delegate.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   protected void installListeners(JFileChooser fc)
 | |
|   {
 | |
|     propertyChangeListener = createPropertyChangeListener(filechooser);
 | |
|     if (propertyChangeListener != null)
 | |
|       filechooser.addPropertyChangeListener(propertyChangeListener);
 | |
|     fc.addPropertyChangeListener(getModel());
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Uninstalls the listeners previously installed by this UI delegate.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   protected void uninstallListeners(JFileChooser fc)
 | |
|   {
 | |
|     if (propertyChangeListener != null)
 | |
|       {
 | |
|         filechooser.removePropertyChangeListener(propertyChangeListener);
 | |
|         propertyChangeListener = null;
 | |
|       }
 | |
|     fc.removePropertyChangeListener(getModel());
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Installs the defaults for this UI delegate.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   protected void installDefaults(JFileChooser fc)
 | |
|   {
 | |
|     installIcons(fc);
 | |
|     installStrings(fc);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Uninstalls the defaults previously added by this UI delegate.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   protected void uninstallDefaults(JFileChooser fc)
 | |
|   {
 | |
|     uninstallStrings(fc);
 | |
|     uninstallIcons(fc);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Installs the icons for this UI delegate.
 | |
|    *
 | |
|    * @param fc  the file chooser (ignored).
 | |
|    */
 | |
|   protected void installIcons(JFileChooser fc)
 | |
|   {
 | |
|     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
 | |
|     computerIcon = MetalIconFactory.getTreeComputerIcon();
 | |
|     detailsViewIcon = defaults.getIcon("FileChooser.detailsViewIcon");
 | |
|     directoryIcon = new MetalIconFactory.TreeFolderIcon();
 | |
|     fileIcon = new MetalIconFactory.TreeLeafIcon();
 | |
|     floppyDriveIcon = MetalIconFactory.getTreeFloppyDriveIcon();
 | |
|     hardDriveIcon = MetalIconFactory.getTreeHardDriveIcon();
 | |
|     homeFolderIcon = defaults.getIcon("FileChooser.homeFolderIcon");
 | |
|     listViewIcon = defaults.getIcon("FileChooser.listViewIcon");
 | |
|     newFolderIcon = defaults.getIcon("FileChooser.newFolderIcon");
 | |
|     upFolderIcon = defaults.getIcon("FileChooser.upFolderIcon");
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Uninstalls the icons previously added by this UI delegate.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   protected void uninstallIcons(JFileChooser fc)
 | |
|   {
 | |
|     computerIcon = null;
 | |
|     detailsViewIcon = null;
 | |
|     directoryIcon = null;
 | |
|     fileIcon = null;
 | |
|     floppyDriveIcon = null;
 | |
|     hardDriveIcon = null;
 | |
|     homeFolderIcon = null;
 | |
|     listViewIcon = null;
 | |
|     newFolderIcon = null;
 | |
|     upFolderIcon = null;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Installs the strings used by this UI delegate.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   protected void installStrings(JFileChooser fc)
 | |
|   {
 | |
|     UIDefaults defaults = UIManager.getLookAndFeelDefaults();
 | |
| 
 | |
|     dirDescText = defaults.getString("FileChooser.directoryDescriptionText");
 | |
|     fileDescText = defaults.getString("FileChooser.fileDescriptionText");
 | |
| 
 | |
|     acceptAllFileFilterText = defaults.getString("FileChooser.acceptAllFileFilterText");
 | |
|     cancelButtonText = "Cancel";
 | |
|     cancelButtonToolTipText = "Abort file chooser dialog";
 | |
|     cancelButtonMnemonic = new Integer((String) UIManager.get("FileChooser.cancelButtonMnemonic")).intValue();
 | |
| 
 | |
|     directoryOpenButtonText = "Open";
 | |
|     directoryOpenButtonToolTipText = "Open selected directory";
 | |
|     directoryOpenButtonMnemonic
 | |
|         = new Integer((String) UIManager.get("FileChooser.directoryOpenButtonMnemonic")).intValue();
 | |
| 
 | |
|     helpButtonText = "Help";
 | |
|     helpButtonToolTipText = "FileChooser help";
 | |
|     helpButtonMnemonic = new Integer((String) UIManager.get("FileChooser.helpButtonMnemonic")).intValue();
 | |
| 
 | |
|     openButtonText = "Open";
 | |
|     openButtonToolTipText = "Open selected file";
 | |
|     openButtonMnemonic = new Integer((String) UIManager.get("FileChooser.openButtonMnemonic")).intValue();
 | |
| 
 | |
|     saveButtonText = "Save";
 | |
|     saveButtonToolTipText = "Save selected file";
 | |
|     saveButtonMnemonic = new Integer((String) UIManager.get("FileChooser.saveButtonMnemonic")).intValue();
 | |
| 
 | |
|     updateButtonText = "Update";
 | |
|     updateButtonToolTipText = "Update directory listing";
 | |
|     updateButtonMnemonic = new Integer((String) UIManager.get("FileChooser.updateButtonMnemonic")).intValue();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Uninstalls the strings previously added by this UI delegate.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   protected void uninstallStrings(JFileChooser fc)
 | |
|   {
 | |
|     acceptAllFileFilterText = null;
 | |
|     dirDescText = null;
 | |
|     fileDescText = null;
 | |
| 
 | |
|     cancelButtonText = null;
 | |
|     cancelButtonToolTipText = null;
 | |
| 
 | |
|     directoryOpenButtonText = null;
 | |
|     directoryOpenButtonToolTipText = null;
 | |
| 
 | |
|     helpButtonText = null;
 | |
|     helpButtonToolTipText = null;
 | |
| 
 | |
|     openButtonText = null;
 | |
|     openButtonToolTipText = null;
 | |
| 
 | |
|     saveButtonText = null;
 | |
|     saveButtonToolTipText = null;
 | |
| 
 | |
|     updateButtonText = null;
 | |
|     updateButtonToolTipText = null;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new directory model.
 | |
|    */
 | |
|   protected void createModel()
 | |
|   {
 | |
|     model = new BasicDirectoryModel(filechooser);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the directory model.
 | |
|    *
 | |
|    * @return The directory model.
 | |
|    */
 | |
|   public BasicDirectoryModel getModel()
 | |
|   {
 | |
|     return model;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a listener to handle changes to the properties of the given
 | |
|    * file chooser component.
 | |
|    *
 | |
|    * @param fc  the file chooser component.
 | |
|    *
 | |
|    * @return A new listener.
 | |
|    */
 | |
|   public PropertyChangeListener createPropertyChangeListener(JFileChooser fc)
 | |
|   {
 | |
|     // The RI returns null here, so do we.
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the current file name.
 | |
|    *
 | |
|    * @return The current file name.
 | |
|    */
 | |
|   public String getFileName()
 | |
|   {
 | |
|     return entry.getText();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the current directory name.
 | |
|    *
 | |
|    * @return The directory name.
 | |
|    *
 | |
|    * @see #setDirectoryName(String)
 | |
|    */
 | |
|   public String getDirectoryName()
 | |
|   {
 | |
|     // XXX: I don't see a case where the thing returns something non-null..
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Sets the file name.
 | |
|    *
 | |
|    * @param filename  the file name.
 | |
|    *
 | |
|    * @see #getFileName()
 | |
|    */
 | |
|   public void setFileName(String filename)
 | |
|   {
 | |
|     // FIXME:  it might be the case that this method provides an access
 | |
|     // point for the JTextField (or whatever) a subclass is using...
 | |
|     //this.filename = filename;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Sets the directory name (NOT IMPLEMENTED).
 | |
|    *
 | |
|    * @param dirname  the directory name.
 | |
|    *
 | |
|    * @see #getDirectoryName()
 | |
|    */
 | |
|   public void setDirectoryName(String dirname)
 | |
|   {
 | |
|     // FIXME: Implement
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Rescans the current directory.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    */
 | |
|   public void rescanCurrentDirectory(JFileChooser fc)
 | |
|   {
 | |
|     getModel().validateFileCache();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * NOT YET IMPLEMENTED.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    * @param f  the file.
 | |
|    */
 | |
|   public void ensureFileIsVisible(JFileChooser fc, File f)
 | |
|   {
 | |
|     // XXX: Not sure what this does.
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the {@link JFileChooser} component that this UI delegate
 | |
|    * represents.
 | |
|    *
 | |
|    * @return The component represented by this UI delegate.
 | |
|    */
 | |
|   public JFileChooser getFileChooser()
 | |
|   {
 | |
|     return filechooser;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the optional accessory panel.
 | |
|    *
 | |
|    * @return The optional accessory panel.
 | |
|    */
 | |
|   public JPanel getAccessoryPanel()
 | |
|   {
 | |
|     return accessoryPanel;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the approve (open or save) button for the dialog.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    *
 | |
|    * @return The button.
 | |
|    */
 | |
|   protected JButton getApproveButton(JFileChooser fc)
 | |
|   {
 | |
|     return accept;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the tool tip text for the approve (open/save) button.  This first
 | |
|    * checks the file chooser to see if a value has been explicitly set - if
 | |
|    * not, a default value appropriate for the type of file chooser is
 | |
|    * returned.
 | |
|    *
 | |
|    * @param fc  the file chooser.
 | |
|    *
 | |
|    * @return The tool tip text.
 | |
|    */
 | |
|   public String getApproveButtonToolTipText(JFileChooser fc)
 | |
|   {
 | |
|     if (fc.getApproveButtonToolTipText() != null)
 | |
|       return fc.getApproveButtonToolTipText();
 | |
|     else if (fc.getDialogType() == JFileChooser.SAVE_DIALOG)
 | |
|       return saveButtonToolTipText;
 | |
|     else
 | |
|       return openButtonToolTipText;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Clears the icon cache.
 | |
|    */
 | |
|   public void clearIconCache()
 | |
|   {
 | |
|     if (fv instanceof BasicFileView)
 | |
|       ((BasicFileView) fv).clearIconCache();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new listener to handle selections in the file list.
 | |
|    *
 | |
|    * @param fc  the file chooser component.
 | |
|    *
 | |
|    * @return A new instance of {@link SelectionListener}.
 | |
|    */
 | |
|   public ListSelectionListener createListSelectionListener(JFileChooser fc)
 | |
|   {
 | |
|     return new SelectionListener();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new listener to handle double-click events.
 | |
|    *
 | |
|    * @param fc  the file chooser component.
 | |
|    * @param list  the list.
 | |
|    *
 | |
|    * @return A new instance of {@link DoubleClickListener}.
 | |
|    */
 | |
|   protected MouseListener createDoubleClickListener(JFileChooser fc, JList list)
 | |
|   {
 | |
|     return new DoubleClickListener(list);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns <code>true</code> if a directory is selected, and
 | |
|    * <code>false</code> otherwise.
 | |
|    *
 | |
|    * @return A boolean.
 | |
|    */
 | |
|   protected boolean isDirectorySelected()
 | |
|   {
 | |
|     return dirSelected;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Sets the flag that indicates whether the current directory is selected.
 | |
|    *
 | |
|    * @param selected  the new flag value.
 | |
|    */
 | |
|   protected void setDirectorySelected(boolean selected)
 | |
|   {
 | |
|     dirSelected = selected;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the current directory.
 | |
|    *
 | |
|    * @return The current directory.
 | |
|    */
 | |
|   protected File getDirectory()
 | |
|   {
 | |
|     return currDir;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Sets the current directory.
 | |
|    *
 | |
|    * @param f  the directory.
 | |
|    */
 | |
|   protected void setDirectory(File f)
 | |
|   {
 | |
|     currDir = f;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the "accept all" file filter.
 | |
|    *
 | |
|    * @param fc  the file chooser component.
 | |
|    *
 | |
|    * @return The "accept all" file filter.
 | |
|    */
 | |
|   public FileFilter getAcceptAllFileFilter(JFileChooser fc)
 | |
|   {
 | |
|     return acceptAll;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the default file view (NOT the file view from the file chooser,
 | |
|    * if there is one).
 | |
|    *
 | |
|    * @param fc  the file chooser component.
 | |
|    *
 | |
|    * @return The file view.
 | |
|    *
 | |
|    * @see JFileChooser#getFileView()
 | |
|    */
 | |
|   public FileView getFileView(JFileChooser fc)
 | |
|   {
 | |
|     return fv;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the dialog title.
 | |
|    *
 | |
|    * @param fc  the file chooser (<code>null</code> not permitted).
 | |
|    *
 | |
|    * @return The dialog title.
 | |
|    *
 | |
|    * @see JFileChooser#getDialogTitle()
 | |
|    */
 | |
|   public String getDialogTitle(JFileChooser fc)
 | |
|   {
 | |
|     String result = fc.getDialogTitle();
 | |
|     if (result == null)
 | |
|       result = getApproveButtonText(fc);
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the approve button mnemonic.
 | |
|    *
 | |
|    * @param fc  the file chooser (<code>null</code> not permitted).
 | |
|    *
 | |
|    * @return The approve button mnemonic.
 | |
|    *
 | |
|    * @see JFileChooser#getApproveButtonMnemonic()
 | |
|    */
 | |
|   public int getApproveButtonMnemonic(JFileChooser fc)
 | |
|   {
 | |
|     if (fc.getApproveButtonMnemonic() != 0)
 | |
|       return fc.getApproveButtonMnemonic();
 | |
|     else if (fc.getDialogType() == JFileChooser.SAVE_DIALOG)
 | |
|       return saveButtonMnemonic;
 | |
|     else
 | |
|       return openButtonMnemonic;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the approve button text.
 | |
|    *
 | |
|    * @param fc  the file chooser (<code>null</code> not permitted).
 | |
|    *
 | |
|    * @return The approve button text.
 | |
|    *
 | |
|    * @see JFileChooser#getApproveButtonText()
 | |
|    */
 | |
|   public String getApproveButtonText(JFileChooser fc)
 | |
|   {
 | |
|     String result = fc.getApproveButtonText();
 | |
|     if (result == null)
 | |
|       {
 | |
|         if (fc.getDialogType() == JFileChooser.SAVE_DIALOG)
 | |
|           result = saveButtonText;
 | |
|         else
 | |
|           result = openButtonText;
 | |
|       }
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates and returns a new action that will be used with the "new folder"
 | |
|    * button.
 | |
|    *
 | |
|    * @return A new instance of {@link NewFolderAction}.
 | |
|    */
 | |
|   public Action getNewFolderAction()
 | |
|   {
 | |
|     if (newFolderAction == null)
 | |
|       newFolderAction = new NewFolderAction();
 | |
|     return newFolderAction;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates and returns a new action that will be used with the "home folder"
 | |
|    * button.
 | |
|    *
 | |
|    * @return A new instance of {@link GoHomeAction}.
 | |
|    */
 | |
|   public Action getGoHomeAction()
 | |
|   {
 | |
|     if (goHomeAction == null)
 | |
|       goHomeAction = new GoHomeAction();
 | |
|     return goHomeAction;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the action that handles events for the "up folder" control button.
 | |
|    *
 | |
|    * @return An instance of {@link ChangeToParentDirectoryAction}.
 | |
|    */
 | |
|   public Action getChangeToParentDirectoryAction()
 | |
|   {
 | |
|     if (changeToParentDirectoryAction == null)
 | |
|       changeToParentDirectoryAction = new ChangeToParentDirectoryAction();
 | |
|     return changeToParentDirectoryAction;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the action that handles events for the "approve" button.
 | |
|    *
 | |
|    * @return An instance of {@link ApproveSelectionAction}.
 | |
|    */
 | |
|   public Action getApproveSelectionAction()
 | |
|   {
 | |
|     if (approveSelectionAction == null)
 | |
|       approveSelectionAction = new ApproveSelectionAction();
 | |
|     return approveSelectionAction;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the action that handles events for the "cancel" button.
 | |
|    *
 | |
|    * @return An instance of {@link CancelSelectionAction}.
 | |
|    */
 | |
|   public Action getCancelSelectionAction()
 | |
|   {
 | |
|     if (cancelSelectionAction == null)
 | |
|       cancelSelectionAction = new CancelSelectionAction();
 | |
|     return cancelSelectionAction;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the update action (an instance of {@link UpdateAction}).
 | |
|    *
 | |
|    * @return An action.
 | |
|    */
 | |
|   public Action getUpdateAction()
 | |
|   {
 | |
|     if (updateAction == null)
 | |
|       updateAction = new UpdateAction();
 | |
|     return updateAction;
 | |
|   }
 | |
| }
 |