diff -r fd16c54261b3 -r 90ce3da70b43 jdk/src/share/classes/java/awt/FileDialog.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/java/awt/FileDialog.java Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,466 @@ +/* + * Copyright 1995-2006 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +package java.awt; + +import java.awt.peer.FileDialogPeer; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.ObjectInputStream; + +/** + * The FileDialog class displays a dialog window + * from which the user can select a file. + *

+ * Since it is a modal dialog, when the application calls + * its show method to display the dialog, + * it blocks the rest of the application until the user has + * chosen a file. + * + * @see Window#show + * + * @author Sami Shaio + * @author Arthur van Hoff + * @since JDK1.0 + */ +public class FileDialog extends Dialog { + + /** + * This constant value indicates that the purpose of the file + * dialog window is to locate a file from which to read. + */ + public static final int LOAD = 0; + + /** + * This constant value indicates that the purpose of the file + * dialog window is to locate a file to which to write. + */ + public static final int SAVE = 1; + + /* + * There are two FileDialog modes: LOAD and + * SAVE. + * This integer will represent one or the other. + * If the mode is not specified it will default to LOAD. + * + * @serial + * @see getMode() + * @see setMode() + * @see java.awt.FileDialog#LOAD + * @see java.awt.FileDialog#SAVE + */ + int mode; + + /* + * The string specifying the directory to display + * in the file dialog. This variable may be null. + * + * @serial + * @see getDirectory() + * @see setDirectory() + */ + String dir; + + /* + * The string specifying the initial value of the + * filename text field in the file dialog. + * This variable may be null. + * + * @serial + * @see getFile() + * @see setFile() + */ + String file; + + /* + * The filter used as the file dialog's filename filter. + * The file dialog will only be displaying files whose + * names are accepted by this filter. + * This variable may be null. + * + * @serial + * @see #getFilenameFilter() + * @see #setFilenameFilter() + * @see FileNameFilter + */ + FilenameFilter filter; + + private static final String base = "filedlg"; + private static int nameCounter = 0; + + /* + * JDK 1.1 serialVersionUID + */ + private static final long serialVersionUID = 5035145889651310422L; + + + static { + /* ensure that the necessary native libraries are loaded */ + Toolkit.loadLibraries(); + if (!GraphicsEnvironment.isHeadless()) { + initIDs(); + } + } + + /** + * Initialize JNI field and method IDs for fields that may be + accessed from C. + */ + private static native void initIDs(); + + /** + * Creates a file dialog for loading a file. The title of the + * file dialog is initially empty. This is a convenience method for + * FileDialog(parent, "", LOAD). + * + * @param parent the owner of the dialog + * @since JDK1.1 + */ + public FileDialog(Frame parent) { + this(parent, "", LOAD); + } + + /** + * Creates a file dialog window with the specified title for loading + * a file. The files shown are those in the current directory. + * This is a convenience method for + * FileDialog(parent, title, LOAD). + * + * @param parent the owner of the dialog + * @param title the title of the dialog + */ + public FileDialog(Frame parent, String title) { + this(parent, title, LOAD); + } + + /** + * Creates a file dialog window with the specified title for loading + * or saving a file. + *

+ * If the value of mode is LOAD, then the + * file dialog is finding a file to read, and the files shown are those + * in the current directory. If the value of + * mode is SAVE, the file dialog is finding + * a place to write a file. + * + * @param parent the owner of the dialog + * @param title the title of the dialog + * @param mode the mode of the dialog; either + * FileDialog.LOAD or FileDialog.SAVE + * @exception IllegalArgumentException if an illegal file + * dialog mode is supplied + * @see java.awt.FileDialog#LOAD + * @see java.awt.FileDialog#SAVE + */ + public FileDialog(Frame parent, String title, int mode) { + super(parent, title, true); + this.setMode(mode); + setLayout(null); + } + + /** + * Creates a file dialog for loading a file. The title of the + * file dialog is initially empty. This is a convenience method for + * FileDialog(parent, "", LOAD). + * + * @param parent the owner of the dialog + * @exception java.lang.IllegalArgumentException if the parent's + * GraphicsConfiguration + * is not from a screen device; + * @exception java.lang.IllegalArgumentException if parent + * is null; this exception is always thrown when + * GraphicsEnvironment.isHeadless + * returns true + * @see java.awt.GraphicsEnvironment#isHeadless + * @since 1.5 + */ + public FileDialog(Dialog parent) { + this(parent, "", LOAD); + } + + /** + * Creates a file dialog window with the specified title for loading + * a file. The files shown are those in the current directory. + * This is a convenience method for + * FileDialog(parent, title, LOAD). + * + * @param parent the owner of the dialog + * @param title the title of the dialog; a null value + * will be accepted without causing a + * NullPointerException to be thrown + * @exception java.lang.IllegalArgumentException if the parent's + * GraphicsConfiguration + * is not from a screen device; + * @exception java.lang.IllegalArgumentException if parent + * is null; this exception is always thrown when + * GraphicsEnvironment.isHeadless + * returns true + * @see java.awt.GraphicsEnvironment#isHeadless + * @since 1.5 + */ + public FileDialog(Dialog parent, String title) { + this(parent, title, LOAD); + } + + /** + * Creates a file dialog window with the specified title for loading + * or saving a file. + *

+ * If the value of mode is LOAD, then the + * file dialog is finding a file to read, and the files shown are those + * in the current directory. If the value of + * mode is SAVE, the file dialog is finding + * a place to write a file. + * + * @param parent the owner of the dialog + * @param title the title of the dialog; a null value + * will be accepted without causing a + * NullPointerException to be thrown + * @param mode the mode of the dialog; either + * FileDialog.LOAD or FileDialog.SAVE + * @exception java.lang.IllegalArgumentException if an illegal + * file dialog mode is supplied; + * @exception java.lang.IllegalArgumentException if the parent's + * GraphicsConfiguration + * is not from a screen device; + * @exception java.lang.IllegalArgumentException if parent + * is null; this exception is always thrown when + * GraphicsEnvironment.isHeadless + * returns true + * @see java.awt.GraphicsEnvironment#isHeadless + * @see java.awt.FileDialog#LOAD + * @see java.awt.FileDialog#SAVE + * @since 1.5 + */ + public FileDialog(Dialog parent, String title, int mode) { + super(parent, title, true); + this.setMode(mode); + setLayout(null); + } + + /** + * Constructs a name for this component. Called by getName() + * when the name is null. + */ + String constructComponentName() { + synchronized (FileDialog.class) { + return base + nameCounter++; + } + } + + /** + * Creates the file dialog's peer. The peer allows us to change the look + * of the file dialog without changing its functionality. + */ + public void addNotify() { + synchronized(getTreeLock()) { + if (parent != null && parent.getPeer() == null) { + parent.addNotify(); + } + if (peer == null) + peer = getToolkit().createFileDialog(this); + super.addNotify(); + } + } + + /** + * Indicates whether this file dialog box is for loading from a file + * or for saving to a file. + * + * @return the mode of this file dialog window, either + * FileDialog.LOAD or + * FileDialog.SAVE + * @see java.awt.FileDialog#LOAD + * @see java.awt.FileDialog#SAVE + * @see java.awt.FileDialog#setMode + */ + public int getMode() { + return mode; + } + + /** + * Sets the mode of the file dialog. If mode is not + * a legal value, an exception will be thrown and mode + * will not be set. + * + * @param mode the mode for this file dialog, either + * FileDialog.LOAD or + * FileDialog.SAVE + * @see java.awt.FileDialog#LOAD + * @see java.awt.FileDialog#SAVE + * @see java.awt.FileDialog#getMode + * @exception IllegalArgumentException if an illegal file + * dialog mode is supplied + * @since JDK1.1 + */ + public void setMode(int mode) { + switch (mode) { + case LOAD: + case SAVE: + this.mode = mode; + break; + default: + throw new IllegalArgumentException("illegal file dialog mode"); + } + } + + /** + * Gets the directory of this file dialog. + * + * @return the (potentially null or invalid) + * directory of this FileDialog + * @see java.awt.FileDialog#setDirectory + */ + public String getDirectory() { + return dir; + } + + /** + * Sets the directory of this file dialog window to be the + * specified directory. Specifying a null or an + * invalid directory implies an implementation-defined default. + * This default will not be realized, however, until the user + * has selected a file. Until this point, getDirectory() + * will return the value passed into this method. + *

+ * Specifying "" as the directory is exactly equivalent to + * specifying null as the directory. + * + * @param dir the specified directory + * @see java.awt.FileDialog#getDirectory + */ + public void setDirectory(String dir) { + this.dir = (dir != null && dir.equals("")) ? null : dir; + FileDialogPeer peer = (FileDialogPeer)this.peer; + if (peer != null) { + peer.setDirectory(this.dir); + } + } + + /** + * Gets the selected file of this file dialog. If the user + * selected CANCEL, the returned file is null. + * + * @return the currently selected file of this file dialog window, + * or null if none is selected + * @see java.awt.FileDialog#setFile + */ + public String getFile() { + return file; + } + + /** + * Sets the selected file for this file dialog window to be the + * specified file. This file becomes the default file if it is set + * before the file dialog window is first shown. + *

+ * Specifying "" as the file is exactly equivalent to specifying + * null + * as the file. + * + * @param file the file being set + * @see java.awt.FileDialog#getFile + */ + public void setFile(String file) { + this.file = (file != null && file.equals("")) ? null : file; + FileDialogPeer peer = (FileDialogPeer)this.peer; + if (peer != null) { + peer.setFile(this.file); + } + } + + /** + * Determines this file dialog's filename filter. A filename filter + * allows the user to specify which files appear in the file dialog + * window. Filename filters do not function in Sun's reference + * implementation for Microsoft Windows. + * + * @return this file dialog's filename filter + * @see java.io.FilenameFilter + * @see java.awt.FileDialog#setFilenameFilter + */ + public FilenameFilter getFilenameFilter() { + return filter; + } + + /** + * Sets the filename filter for this file dialog window to the + * specified filter. + * Filename filters do not function in Sun's reference + * implementation for Microsoft Windows. + * + * @param filter the specified filter + * @see java.io.FilenameFilter + * @see java.awt.FileDialog#getFilenameFilter + */ + public synchronized void setFilenameFilter(FilenameFilter filter) { + this.filter = filter; + FileDialogPeer peer = (FileDialogPeer)this.peer; + if (peer != null) { + peer.setFilenameFilter(filter); + } + } + + /** + * Reads the ObjectInputStream and performs + * a backwards compatibility check by converting + * either a dir or a file + * equal to an empty string to null. + * + * @param s the ObjectInputStream to read + */ + private void readObject(ObjectInputStream s) + throws ClassNotFoundException, IOException + { + s.defaultReadObject(); + + // 1.1 Compatibility: "" is not converted to null in 1.1 + if (dir != null && dir.equals("")) { + dir = null; + } + if (file != null && file.equals("")) { + file = null; + } + } + + /** + * Returns a string representing the state of this FileDialog + * window. This method is intended to be used only for debugging purposes, + * and the content and format of the returned string may vary between + * implementations. The returned string may be empty but may not be + * null. + * + * @return the parameter string of this file dialog window + */ + protected String paramString() { + String str = super.paramString(); + str += ",dir= " + dir; + str += ",file= " + file; + return str + ((mode == LOAD) ? ",load" : ",save"); + } + + boolean postsOldMouseEvents() { + return false; + } +}