cd6d4007aa
libjava/ChangeLog: 2008-10-21 Andrew John Hughes <gnu_andrew@member.fsf.org> * sources.am, Makfile.in: Regenerate. 2008-10-17 Matthias Klose <doko@ubuntu.com> * configure.ac: Fix bashisms. * configure: Regenerate. 2008-10-15 Matthias Klose <doko@ubuntu.com> * configure.ac: Disable build of gjdoc, if configured without --with-antlr-jar or if no antlr.jar found. * configure: Regenerate. 2008-10-09 Andrew John Hughes <gnu_andrew@member.fsf.org> * classpath/configure.ac, * classpath/m4/ac_prog_antlr.m4, * classpath/m4/ac_prog_java.m4, * classpath/tools/Makefile.am: Ported --regen-gjdoc-parser patch and cantlr support from GNU Classpath. 2008-10-06 Andrew Haley <aph@redhat.com> * java/lang/Thread.java (Thread): Always create the ThreadLocalMap when creating a thread. (getThreadLocals) Don't lazily create the ThreadLocalMap. 2008-09-28 Andrew John Hughes <gnu_andrew@member.fsf.org> * classpath/java/lang/ThreadLocalMap.java, * java/lang/ThreadLocalMap$Entry.h, * java/lang/ThreadLocalMap.h, * lib/java/lang/ThreadLocalMap.class, * lib/java/lang/ThreadLocalMap$Entry.class: Add the new files for the ThreadLocal patch. 2008-09-28 Andrew John Hughes <gnu_andrew@member.fsf.org> * classpath/ChangeLog, * classpath/java/lang/InheritableThreadLocal.java, * classpath/java/lang/Thread.java, * classpath/java/lang/ThreadLocal.java: Merge Daniel Frampton's ThreadLocal patch. * gcj/javaprims.h: Updated. * java/lang/Thread.h: Regenerated. * java/lang/Thread.java: Replace WeakIdentityHashMap with ThreadLocalMap. (getThreadLocals()): Likewise. * java/lang/ThreadLocal.h: Regenerated. * java/lang/ThreadLocal.java: (computeNextHash()): New method. (ThreadLocal()): Initialise fastHash. (internalGet()): Updated to match Classpath's get(). (internalSet(Object)): Likewise for set(Object). (internalRemove()): Likewise for remove(). 2008-09-25 Andrew John Hughes <gnu_andrew@member.fsf.org> * classpath/configure, * classpath/configure.ac: Resynchronise with Classpath's configure. * classpath/examples/Makefile.in: Add equivalent support for building as in tools/Makefile.in. * classpath/java/nio/Buffer.java, * classpath/java/nio/ByteBuffer.java, * classpath/java/nio/ByteBufferImpl.java, * classpath/java/nio/CharBuffer.java, * classpath/java/nio/CharBufferImpl.java, * classpath/java/nio/CharSequenceBuffer.java, * classpath/java/nio/CharViewBufferImpl.java, * classpath/java/nio/DirectByteBufferImpl.java, * classpath/java/nio/DoubleBuffer.java, * classpath/java/nio/DoubleBufferImpl.java, * classpath/java/nio/DoubleViewBufferImpl.java, * classpath/java/nio/FloatBuffer.java, * classpath/java/nio/FloatBufferImpl.java, * classpath/java/nio/FloatViewBufferImpl.java, * classpath/java/nio/IntBuffer.java, * classpath/java/nio/IntBufferImpl.java, * classpath/java/nio/IntViewBufferImpl.java, * classpath/java/nio/LongBuffer.java, * classpath/java/nio/LongBufferImpl.java, * classpath/java/nio/LongViewBufferImpl.java, * classpath/java/nio/MappedByteBuffer.java, * classpath/java/nio/MappedByteBufferImpl.java, * classpath/java/nio/ShortBuffer.java, * classpath/java/nio/ShortBufferImpl.java, * classpath/java/nio/ShortViewBufferImpl.java: Replace use of gnu.classpath.Pointer with gnu.gcj.RawData, and fix some formatting issues. * classpath/tools/gnu/classpath/tools/gjdoc/expr/JavaLexer.java, * classpath/tools/gnu/classpath/tools/gjdoc/expr/JavaLexer.smap, * classpath/tools/gnu/classpath/tools/gjdoc/expr/JavaRecognizer.java, * classpath/tools/gnu/classpath/tools/gjdoc/expr/JavaRecognizer.smap, * classpath/tools/gnu/classpath/tools/gjdoc/expr/JavaTokenTypes.java, * classpath/tools/gnu/classpath/tools/gjdoc/expr/JavaTokenTypes.txt: Regenerated (later version of antlr). * java/nio/Buffer.h: Regenerated. * java/nio/Buffer.java: Ported changes from Classpath. * java/nio/ByteBuffer.h, * java/nio/CharBuffer.h: Regenerated. * java/nio/DirectByteBufferImpl.java: Ported changes from Classpath. * java/nio/DoubleBuffer.h, * java/nio/FloatBuffer.h, * java/nio/IntBuffer.h, * java/nio/LongBuffer.h, * java/nio/MappedByteBuffer.h, * java/nio/MappedByteBufferImpl.h: Regenerated. * java/nio/MappedByteBufferImpl.java: Ported changes from Classpath. * java/nio/ShortBuffer.h: Regenerated. 2008-09-24 Matthias Klose <doko@ubuntu.com> * configure.ac: Search for antlr.jar, if not configured. * configure: Regenerate. 2008-09-24 Matthias Klose <doko@ubuntu.com> * Makefile.am: Build a gjdoc binary, if enabled. * configure.ac: Add options --disable-gjdoc, --with-antlr-jar=file. * Makefile.in, */Makefile.in, configure: Regenerate. 2008-09-22 Andrew Haley <aph@redhat.com> * java/lang/String.java (toString(char[], int, int)): New method. 2008-09-14 Matthias Klose <doko@ubuntu.com> Import GNU Classpath (libgcj-import-20080914). * Regenerate class and header files. * Regenerate auto* files. * configure.ac: Don't pass --disable-gjdoc to classpath. * sources.am: Regenerated. * HACKING: Mention to build gjdoc in maintainer builds. * gnu/classpath/Configuration.java: Update classpath version. * gcj/javaprims.h: Update. 2008-09-08 Andrew John Hughes <gnu_andrew@member.fsf.org> * Makefile.am: Replace natStringBuffer.cc and natStringBuilder.cc with natAbstractStringBuffer.cc. * Makefile.in: Regenerated. * java/lang/AbstractStringBuffer.java: (append(int)): Made native. (regionMatches(int,String)): Likewise. * java/lang/StringBuffer.h: Regenerated. * java/lang/StringBuffer.java: Remerged with GNU Classpath. * java/lang/StringBuilder.h: Regenerated. * java/lang/StringBuilder.java: Remerged with GNU Classpath. * java/lang/natAbstractStringBuffer.cc: Provide common native methods for StringBuffer and StringBuilder. * java/lang/natStringBuffer.cc, * java/lang/natStringBuilder.cc: Removed. 2008-09-04 Andrew John Hughes <gnu_andrew@member.fsf.org> * Makefile.in, * classpath/configure: Regenerated. * gnu/gcj/util/natDebug.cc, * gnu/gcj/xlib/natColormap.cc, * gnu/gcj/xlib/natDisplay.cc, * gnu/gcj/xlib/natDrawable.cc, * gnu/gcj/xlib/natFont.cc, * gnu/gcj/xlib/natWMSizeHints.cc, * gnu/gcj/xlib/natWindow.cc, * gnu/gcj/xlib/natXImage.cc: Add :: prefix to namespaces. * java/io/CharArrayWriter.h, * java/lang/StringBuffer.h: Regenerated using patched gjavah. * java/lang/natStringBuffer.cc: Fix naming of append(jint). * java/sql/Timestamp.h: Regenerated using patched gjavah. * jni.cc: Rename p to functions to match change in GNU Classpath. * scripts/makemake.tcl: Switch gnu.java.math to BC compilation. * sources.am: Regenerated. 2008-08-21 Andrew John Hughes <gnu_andrew@member.fsf.org> * Makefile.in: Updated location of Configuration.java. * classpath/lib/gnu/java/locale/LocaleData.class: Regenerated. 2008-08-18 Andrew John Hughes <gnu_andrew@member.fsf.org> * Makefile.in: Updated with new Java files. * classpath/configure: Regenerated. * classpath/tools/Makefile.am: Add missing use of GJDOC_EX so --disable-gjdoc works. * classpath/tools/Makefile.in: Regenerated. 2008-08-15 Matthias Klose <doko@ubuntu.com> Import GNU Classpath (libgcj-import-20080811). * Regenerate class and header files. * Regenerate auto* files. * configure.ac: Don't pass --with-fastjar to classpath, substitute new dummy value in classpath/gnu/classpath/Configuration.java.in, pass --disable-gjdoc to classpath. * scripts/makemake.tcl: * sources.am: Regenerated. * java/lang/AbstractStringBuffer.java, gnu/java/lang/VMCPStringBuilder.java: New, copied from classpath, use System instead of VMSystem. * java/lang/StringBuffer.java: Merge from classpath. * java/lang/ClassLoader.java: Merge from classpath. * gcj/javaprims.h: Update class definitions, remove _Jv_jobjectRefType, jobjectRefType definitions. libjava/classpath/ChangeLog.gcj: 2008-10-21 Matthias Klose <doko@ubuntu.com> * classpath/tools/gnu/classpath/tools/gjdoc/expr/Java*: Move from ... * classpath/tools/generated/gnu/classpath/tools/gjdoc/expr/ ... here. * Update .class files. 2008-10-21 Andrew John Hughes <gnu_andrew@member.fsf.org> * tools/Makefile.am: Always generate parser in the srcdir. 2008-10-21 Matthias Klose <doko@ubuntu.com> * doc/Makefile.am (MAINTAINERCLEANFILES): Add gjdoc.1. * doc/Makefile.in: Regenerate. 2008-10-20 Matthias Klose <doko@ubuntu.com> * configure.ac: Don't check for working java, if not configured with --enable-java-maintainer-mode. * configure: Regenerate. 2008-10-19 Matthias Klose <doko@ubuntu.com> * m4/ac_prog_java.m4: Revert previous change. * m4/ac_prog_javac.m4: Apply it here. * configure: Regenerate. 2008-10-19 Matthias Klose <doko@ubuntu.com> * m4/ac_prog_javac.m4: Don't check for working javac, if not configured with --enable-java-maintainer-mode. * configure: Regenerate. * Makefile.in, */Makefile.in: Regenerate. 2008-09-30 Matthias Klose <doko@ubuntu.com> * m4/ac_prog_antlr.m4: Check for cantlr binary as well. 2008-09-29 Matthias Klose <doko@ubuntu.com> * m4/ac_prog_antlr.m4: Check for antlr binary as well. 2008-09-28 Matthias Klose <doko@ubuntu.com> * PR libgcj/37636. Revert: 2008-02-20 Matthias Klose <doko@ubuntu.com> * tools/Makefile.am ($(TOOLS_ZIP)): Revert part of previous change, Do copy resource files in JAVA_MAINTAINER_MODE only. * tools/Makefile.in: Regenerate. 2008-09-14 Matthias Klose <doko@ubuntu.com> * m4/ac_prog_javac_works.m4, m4/ac_prog_javac.m4, m4/acinclude.m4: Revert local changes. * m4/ac_prog_antlr.m4: Check for an runantlr binary. * tools/Makefile.am, lib/Makefile.am: Revert local changes (JCOMPILER). * tools/Makefile.am: Remove USE_JAVAC_FLAGS, pass ANTLR_JAR in GLIBJ_CLASSPATH. 2008-09-14 Matthias Klose <doko@ubuntu.com> Revert: Daniel Frampton <zyridium at zyridium.net> * AUTHORS: Added. * java/lang/InheritableThreadLocal.java, * java/lang/Thread.java, * java/lang/ThreadLocal.java: Modified to use java.lang.ThreadLocalMap. * java/lang/ThreadLocalMap.java: New cheaper ThreadLocal-specific WeakHashMap. 2008-08-15 Matthias Klose <doko@ubuntu.com> * m4/acinclude.m4 (CLASSPATH_JAVAC_MEM_CHECK): Remove unknown args for javac. libjava/classpath/ChangeLog: 2008-10-20 Andrew John Hughes <gnu_andrew@member.fsf.org> * m4/ac_prog_antlr.m4: Remove redundant checks. * tools/Makefile.am: Use gjdoc_gendir when calling antlr. 2008-10-15 Andrew John Hughes <gnu_andrew@member.fsf.org> * configure.ac: Remove superfluous AC_PROG_JAVA call. 2008-10-06 Andrew John Hughes <gnu_andrew@member.fsf.org> * m4/ac_prog_antlr: Check for cantlr as well. * tools/Makefile.am: Only build GJDoc parser when both CREATE_GJDOC and CREATE_GJDOC_PARSER are on. 2008-10-02 Andrew John Hughes <gnu_andrew@member.fsf.org> * configure.ac: Add regen-gjdoc-parser option, and separate antlr tests. * m4/ac_prog_antlr.m4: Turn single test into AC_LIB_ANTLR and AC_PROG_ANTLR. * m4/ac_prog_java.m4: Quote tests. * tools/Makefile.am: Support CREATE_GJDOC_PARSER option. 2008-09-14 Andrew John Hughes <gnu_andrew@member.fsf.org> * examples/Makefile.am: Check lib directly as well as glibj.zip for boot classes. * m4/acinclude.m4: Only require the class files to be built to allow the tools and examples to be built, not the installation of glibj.zip. * tools/Makefile.am: Check lib directly as well as glibj.zip for boot classes. 2008-09-13 Andrew John Hughes <gnu_andrew@member.fsf.org> * examples/Makefile.am, * lib/Makefile.am: Add GCJ rules. * m4/ac_prog_javac.m4: Check whether JAVAC is gcj. * m4/ac_prog_javac_works.m4: Add GCJ rules. * m4/acinclude.m4: Don't bother checking for -J if using GCJ. * tools/Makefile.am: Add GCJ rules. 2007-08-23 Daniel Frampton <zyridium@zyridium.net> * AUTHORS: Added. * java/lang/InheritableThreadLocal.java, * java/lang/Thread.java, * java/lang/ThreadLocal.java: Modified to use java.lang.ThreadLocalMap. * java/lang/ThreadLocalMap.java: New cheaper ThreadLocal-specific WeakHashMap. 2008-02-07 Ian Rogers <ian.rogers@manchester.ac.uk> * java/util/zip/ZipEntry.java: Use byte fields instead of integer fields, store the time as well as the DOS time and don't retain a global Calendar instance. (setDOSTime(int)): Set KNOWN_DOSTIME instead of KNOWN_TIME, and unset KNOWN_TIME. (getDOSTime()): Compute DOS time from UNIX time only when needed. (clone()): Provide cloning via the ZipEntry constructor where possible. (setTime(long)): Don't compute DOS time at this point. (getCalendar()): Removed. 2008-09-09 Andrew John Hughes <gnu_andrew@member.fsf.org> * tools/gnu/classpath/tools/getopt/Parser.java: (setHeader(String)): Make synchronized. (setFooter(String)): Likewise. * tools/gnu/classpath/tools/rmic/SourceGiopRmicCompiler.java, (reset()): Make synchronized. (name(Class)): Likewise. 2008-09-04 Robert Schuster <robertschuster@fsfe.org> * gnu/java/nio/charset/ByteDecodeLoopHelper: (arrayDecodeLoop): Added new break label, escape to that label. * gnu/java/nio/charset/ByteEncodeLoopHelper: (arrayDecodeLoop): Added new break label, escape to that label. 2008-09-04 Robert Schuster <robertschuster@fsfe.org> * java/text/DecimalFormat.java: (scanFix): Use 'i + 1' when looking at following character. (scanNegativePattern): Dito. 2008-09-02 Andrew John Hughes <gnu_andrew@member.fsf.org> * tools/gnu/classpath/tools/javah/ClassWrapper.java: (makeVtable()): Populate methodNameMap. (printMethods(CniPrintStream)): Always use pre-populated methodNameMap for bridge targets. 2008-09-01 Mario Torre <neugens@aicas.com> * gnu/java/awt/peer/x/XImage.java (XImageProducer): remove @Override annotation to allow compilation on javac < 1.6 and ecj < 3.4. 2008-09-01 Mario Torre <neugens@aicas.com> * gnu/java/awt/peer/x/XGraphicsDevice.java (getDisplay): fix to support new Escher API. * gnu/java/awt/peer/x/XImage.java (getSource): method implemented. * gnu/java/awt/peer/x/XImage.java (XImageProducer): implement ImageProducer for getSource. 2008-09-01 Andrew John Hughes <gnu_andrew@member.fsf.org> * gnu/java/util/regex/BacktrackStack.java, * gnu/java/util/regex/CharIndexed.java, * gnu/java/util/regex/CharIndexedCharArray.java, * gnu/java/util/regex/CharIndexedCharSequence.java, * gnu/java/util/regex/CharIndexedInputStream.java, * gnu/java/util/regex/CharIndexedString.java, * gnu/java/util/regex/CharIndexedStringBuffer.java, * gnu/java/util/regex/RE.java, * gnu/java/util/regex/REException.java, * gnu/java/util/regex/REFilterInputStream.java, * gnu/java/util/regex/REMatch.java, * gnu/java/util/regex/REMatchEnumeration.java, * gnu/java/util/regex/RESyntax.java, * gnu/java/util/regex/REToken.java, * gnu/java/util/regex/RETokenAny.java, * gnu/java/util/regex/RETokenBackRef.java, * gnu/java/util/regex/RETokenChar.java, * gnu/java/util/regex/RETokenEnd.java, * gnu/java/util/regex/RETokenEndOfPreviousMatch.java, * gnu/java/util/regex/RETokenEndSub.java, * gnu/java/util/regex/RETokenIndependent.java, * gnu/java/util/regex/RETokenLookAhead.java, * gnu/java/util/regex/RETokenLookBehind.java, * gnu/java/util/regex/RETokenNamedProperty.java, * gnu/java/util/regex/RETokenOneOf.java, * gnu/java/util/regex/RETokenPOSIX.java, * gnu/java/util/regex/RETokenRange.java, * gnu/java/util/regex/RETokenRepeated.java, * gnu/java/util/regex/RETokenStart.java, * gnu/java/util/regex/RETokenWordBoundary.java, * gnu/java/util/regex/UncheckedRE.java: Fix indentation. 2008-09-01 Andrew John Hughes <gnu_andrew@member.fsf.org> * gnu/java/util/regex/RETokenStart.java: (getMaximumLength()): Add Override annotation. (matchThis(CharIndexed, REMatch)): Likewise. (returnsFixedLengthMatches()): Renamed from returnsFixedLengthmatches and added Override annotation. (findFixedLengthMatches(CharIndexed,REMatch,int)): Add Override annotation. (dump(CPStringBuilder)): Likewise. * gnu/javax/print/ipp/IppRequest.java: (RequestWriter.writeOperationAttributes(AttributeSet)): Throw exception, don't just create and drop it. * javax/management/MBeanServerPermission.java: (MBeanServerPermissionCollection.add(Permission)): Compare against individual Strings not the entire array, and store the result of replace. * javax/swing/text/html/StyleSheet.java: (setBaseFontSize(size)): Store result of trim(). 2008-09-01 Andrew John Hughes <gnu_andrew@member.fsf.org> * javax/tools/FileObject.java: (openReader(boolean)): Document new parameter. 2008-03-27 Michael Franz <mvfranz@gmail.com> PR classpath/35690: * javax/tools/FileObject.java: (toUri()): Fix case from toURI. (openReader(boolean)): Add missing boolean argument. 2008-08-26 Andrew John Hughes <gnu_andrew@member.fsf.org> PR classpath/35487: * gnu/javax/management/Server.java: (beans): Change to ConcurrentHashMap. (defaultDomain): Make final. (outer): Likewise. (LazyListenersHolder): Added to wrap listeners, also now a ConcurrentHashMap, providing lazy initialisation safely. (sequenceNumber): Documented. (getBean(ObjectName)): Remove redundant cast. (addNotificationListener(ObjectName,NotificationListener, NotificationFilter,Object)): Remove map initialisation and use holder. (getObjectInstance(ObjectName)): Remove redundant cast. (registerMBean(Object,ObjectName)): Add bean atomically. (removeNotificationListener(ObjectName,NotificationListener)): Simplified. (removeNotificationListener(ObjectName,NotificationListener, NotificationFilter,Object)): Likewise. (notify(ObjectName,String)): Documented. 2008-08-26 Andrew John Hughes <gnu_andrew@member.fsf.org> * gnu/javax/management/Server.java: Genericised. 2008-08-26 Andrew John Hughes <gnu_andrew@member.fsf.org> * gnu/javax/management/Translator.java: Genericised. 2008-08-26 Andrew John Hughes <gnu_andrew@member.fsf.org> * javax/management/DefaultLoaderRepository.java, * javax/management/JMX.java, * javax/management/MBeanAttributeInfo.java, * javax/management/MBeanConstructorInfo.java, * javax/management/MBeanOperationInfo.java, * javax/management/MBeanServerDelegate.java: Fix warnings due to generics. 2008-08-25 Andrew John Hughes <gnu_andrew@member.fsf.org> * javax/management/MBeanPermission.java, * javax/management/MBeanServerDelegate.java, * javax/management/MBeanServerFactory.java, * javax/management/MBeanServerInvocationHandler.java, * javax/management/MBeanServerPermission.java: Fix warnings due to use of non-generic collections. 2008-08-25 Mario Torre <neugens@aicas.com> * gnu/javax/rmi/CORBA/RmiUtilities.java (readValue): check if sender is null to avoid NPE. 2008-08-22 Mario Torre <neugens@aicas.com> * gnu/CORBA/OrbFunctional.java (set_parameters): Fix NullPointerException checking when param is null. 2008-08-23 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/util/regex/Matcher.java: (reset()): Reset append position so we don't try and append to the end of the old input. 2008-08-22 Andrew John Hughes <gnu_andrew@member.fsf.org> PR classpath/32028: * m4/acinclude.m4: Also allow versions of GJDoc from 0.8* on, as CVS is 0.8.0-pre. 2008-08-21 Andrew John Hughes <gnu_andrew@member.fsf.org> PR classpath/32028: * m4/acinclude.m4: (CLASSPATH_WITH_GJDOC): Ensure version 0.7.9 is being used. 2008-08-20 Andrew John Hughes <gnu_andrew@member.fsf.org> * tools/Makefile.am: Add taglets subdirectory to list of excluded paths when GJDoc is not compiled. 2008-08-19 David P Grove <groved@us.ibm.com> * scripts/check_jni_methods.sh.in: Fix build issue on AIX by splitting generation of method list. 2008-08-18 Andrew John Hughes <gnu_andrew@member.fsf.org> * native/jni/gstreamer-peer/gst_native_pipeline.c: (get_free_space(int)): Use #else not #elif when there is no condition. 2008-08-17 Andrew John Hughes <gnu_andrew@member.fsf.org> PR classpath/31895: * java/text/DecimalFormat.java: (setCurrency(Currency)): Update prefixes and suffixes when currency changes. * java/text/DecimalFormatSymbols.java: (DecimalFormatSymbols(Locale)): Set locale earlier so it can be used by setCurrency(Currency). (setCurrency(Currency)): Set the symbol correctly using the locale of the instance. * java/util/Currency.java: Throw error instead of just printing a message. 2008-08-17 Andrew John Hughes <gnu_andrew@member.fsf.org> * javax/activation/ActivationDataFlavor.java: Suppress warnings from public API. (mimeType): Made final. (representationClass): Added generic type and made final. (normalizeMimeTypeParameter(String,String)): Use CPStringBuilder. * javax/activation/CommandInfo.java: (verb): Made final. (className): Made final. * javax/activation/DataHandler.java: (dataSource): Made final. * javax/activation/FileDataSource.java: (file): Made final. * javax/activation/MailcapCommandMap.java: Use generics on collections and CPStringBuilder instead of StringBuffer. * javax/activation/MimeType.java: (toString()): Use CPStringBuilder. (getBaseType()): Likewise. * javax/activation/MimeTypeParameterList.java: Use generics on collections and CPStringBuilder instead of StringBuffer. * javax/activation/MimeTypeParseException.java: (MimeTypeParseException(String,String)): Use CPStringBuilder. * javax/activation/MimetypesFileTypeMap.java: Use generics on collections and CPStringBuilder instead of StringBuffer. * javax/activation/URLDataSource.java: (url): Made final. 2008-08-17 Andrew John Hughes <gnu_andrew@member.fsf.org> * gnu/javax/activation/viewers/ImageViewer.java, * gnu/javax/activation/viewers/TextEditor.java, * gnu/javax/activation/viewers/TextViewer.java, * javax/activation/ActivationDataFlavor.java, * javax/activation/CommandInfo.java, * javax/activation/CommandMap.java, * javax/activation/CommandObject.java, * javax/activation/DataContentHandler.java, * javax/activation/DataContentHandlerFactory.java, * javax/activation/DataHandler.java, * javax/activation/DataHandlerDataSource.java, * javax/activation/DataSource.java, * javax/activation/DataSourceDataContentHandler.java, * javax/activation/FileDataSource.java, * javax/activation/FileTypeMap.java, * javax/activation/MailcapCommandMap.java, * javax/activation/MimeType.java, * javax/activation/MimeTypeParameterList.java, * javax/activation/MimeTypeParseException.java, * javax/activation/MimetypesFileTypeMap.java, * javax/activation/ObjectDataContentHandler.java, * javax/activation/URLDataSource.java, * javax/activation/UnsupportedDataTypeException.java, * javax/activation/package.html, * resource/META-INF/mailcap.default, * resource/META-INF/mimetypes.default: Import GNU JAF CVS as of 17/08/2008. 2006-04-25 Archit Shah <ashah@redhat.com> * javax/activation/MimeTypeParameterList.java: Insert ';' separator before parameter list. 2005-06-29 Xavier Poinsard <xpoinsard@openpricer.com> * javax/activation/ObjectDataContentHandler.java: Fixed typo. 2005-05-28 Chris Burdess <dog@bluezoo.org> * javax/activation/CommandMap.java, * javax/activation/MailcapCommandMap.java: Updated to JAF 1.1. 2004-06-09 Chris Burdess <dog@bluezoo.org> * javax/activation/MailcapCommandMap.java: Fixed bug whereby x-java prefix was not attempted. 2008-08-17 Andrew John Hughes <gnu_andrew@member.fsf.org> * AUTHORS: Added Laszlo. 2008-04-20 Andrew John Hughes <gnu_andrew@member.fsf.org> PR classpath/30436: * java/util/Scanner.java: Fix package to be java.util and correct indentation. 2007-07-25 Laszlo Andras Hernadi <e0327023@student.tuwien.ac.at> PR classpath/30436: * java/util/Scanner.java: Initial implementation. 2008-08-17 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/util/regex/Matcher.java: (toMatchResult()): Implemented. 2008-08-13 Joshua Sumali <jsumali@redhat.com> * doc/Makefile.am (gjdoc.pod): Generate gjdoc pod from cp-tools.texinfo instead of invoke.texi. Remove invoke.texi from EXTRA_DIST. * doc/invoke.texi: Removed and merged into ... * doc/cp-tools.texinfo: Here 2008-08-12 Robert Schuster <robertschuster@fsfe.org> * native/jni/java-net/local.c (local_bind): Removed fprintf call, fixed access outside of array bounds. From-SVN: r141271
1627 lines
43 KiB
Java
1627 lines
43 KiB
Java
/* JFileChooser.java --
|
|
Copyright (C) 2002, 2004, 2005, 2006, 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;
|
|
|
|
import gnu.java.lang.CPStringBuilder;
|
|
|
|
import java.awt.Component;
|
|
import java.awt.Frame;
|
|
import java.awt.GraphicsEnvironment;
|
|
import java.awt.HeadlessException;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.WindowEvent;
|
|
import java.awt.event.WindowAdapter;
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
|
|
import javax.accessibility.Accessible;
|
|
import javax.accessibility.AccessibleContext;
|
|
import javax.accessibility.AccessibleRole;
|
|
import javax.swing.filechooser.FileFilter;
|
|
import javax.swing.filechooser.FileSystemView;
|
|
import javax.swing.filechooser.FileView;
|
|
import javax.swing.plaf.FileChooserUI;
|
|
|
|
|
|
/**
|
|
* A component that provides the user a dialog box to browse through a
|
|
* filesystem and choose one or more files or directories.
|
|
*
|
|
* A JFileChooser can be configured to filter the displayed file list
|
|
* by adding a {@link FileFilter} instance using
|
|
* {@link #addChoosableFileFilter(FileFilter)}. Additional components can
|
|
* be embedded in the file chooser using {@link #setAccessory(JComponent)}.
|
|
* The JFileChooser properties also provide mechanisms to customize the
|
|
* behaviour of the file chooser.
|
|
*
|
|
* @author Kim Ho (kho@luxsci.net)
|
|
*/
|
|
public class JFileChooser extends JComponent implements Accessible
|
|
{
|
|
private static final long serialVersionUID = 3162921138695327837L;
|
|
|
|
/**
|
|
* A dialog type for selecting a file to open.
|
|
* @see #setDialogType(int)
|
|
*/
|
|
public static final int OPEN_DIALOG = 0;
|
|
|
|
/**
|
|
* A dialog type for selecting a file to save.
|
|
* @see #setDialogType(int)
|
|
*/
|
|
public static final int SAVE_DIALOG = 1;
|
|
|
|
/**
|
|
* A dialog type for some custom purpose.
|
|
* @see #setDialogType(int)
|
|
*/
|
|
public static final int CUSTOM_DIALOG = 2;
|
|
|
|
/**
|
|
* A return value indicating the file chooser has been closed by cancelling.
|
|
*
|
|
* @see #showOpenDialog(Component)
|
|
* @see #showSaveDialog(Component)
|
|
*/
|
|
public static final int CANCEL_OPTION = 1;
|
|
|
|
/**
|
|
* A return value indicating the file chooser has been closed by approving
|
|
* the selection.
|
|
* @see #showOpenDialog(Component)
|
|
* @see #showSaveDialog(Component)
|
|
*/
|
|
public static final int APPROVE_OPTION = 0;
|
|
|
|
/**
|
|
* A return value indicating the file chooser has been closed by some error.
|
|
* @see #showOpenDialog(Component)
|
|
* @see #showSaveDialog(Component)
|
|
*/
|
|
public static final int ERROR_OPTION = -1;
|
|
|
|
/**
|
|
* A selection mode constant indicating acceptance of files only.
|
|
* @see #setFileSelectionMode(int)
|
|
*/
|
|
public static final int FILES_ONLY = 0;
|
|
|
|
/**
|
|
* A selection mode constant indicating acceptance of directories only.
|
|
* @see #setFileSelectionMode(int)
|
|
*/
|
|
public static final int DIRECTORIES_ONLY = 1;
|
|
|
|
/**
|
|
* A selection mode constant indicating acceptance of files and directories.
|
|
* @see #setFileSelectionMode(int)
|
|
*/
|
|
public static final int FILES_AND_DIRECTORIES = 2;
|
|
|
|
/**
|
|
* Action command string for cancelling the current selection.
|
|
* @see #cancelSelection()
|
|
*/
|
|
public static final String CANCEL_SELECTION = "CancelSelection";
|
|
|
|
/**
|
|
* Action command string for approving the current selection.
|
|
* @see #cancelSelection()
|
|
*/
|
|
public static final String APPROVE_SELECTION = "ApproveSelection";
|
|
|
|
/**
|
|
* The name of the property for the approve button text.
|
|
* @see #setApproveButtonText(String)
|
|
*/
|
|
public static final String APPROVE_BUTTON_TEXT_CHANGED_PROPERTY =
|
|
"ApproveButtonTextChangedProperty";
|
|
|
|
/**
|
|
* The name of the property for the approve button tool tip text.
|
|
* @see #setApproveButtonToolTipText(String)
|
|
*/
|
|
public static final String APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY =
|
|
"ApproveButtonToolTipTextChangedProperty";
|
|
|
|
/**
|
|
* The name of the property for the approve button mnemonic.
|
|
* @see #setApproveButtonMnemonic(int)
|
|
*/
|
|
public static final String APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY =
|
|
"ApproveButtonMnemonicChangedProperty";
|
|
|
|
/**
|
|
* The name of the property for control button visibility.
|
|
* @see #setControlButtonsAreShown(boolean)
|
|
*/
|
|
public static final String CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY =
|
|
"ControlButtonsAreShownChangedProperty";
|
|
|
|
/**
|
|
* The name of the property for the current directory.
|
|
* @see #setCurrentDirectory(File)
|
|
*/
|
|
public static final String DIRECTORY_CHANGED_PROPERTY = "directoryChanged";
|
|
|
|
/**
|
|
* The name of the property for the selected file.
|
|
* @see #setSelectedFile(File)
|
|
*/
|
|
public static final String SELECTED_FILE_CHANGED_PROPERTY =
|
|
"SelectedFileChangedProperty";
|
|
|
|
/**
|
|
* The name of the property for the selected files.
|
|
* @see #setSelectedFiles(File[])
|
|
*/
|
|
public static final String SELECTED_FILES_CHANGED_PROPERTY =
|
|
"SelectedFilesChangedProperty";
|
|
|
|
/**
|
|
* The name of the property for multi-selection.
|
|
* @see #setMultiSelectionEnabled(boolean)
|
|
*/
|
|
public static final String MULTI_SELECTION_ENABLED_CHANGED_PROPERTY =
|
|
"MultiSelectionEnabledChangedProperty";
|
|
|
|
/**
|
|
* The name of the 'file system view' property.
|
|
* @see #setFileSystemView(FileSystemView)
|
|
*/
|
|
public static final String FILE_SYSTEM_VIEW_CHANGED_PROPERTY =
|
|
"FileSystemViewChanged";
|
|
|
|
/**
|
|
* The name of the 'file view' property.
|
|
* @see #setFileView(FileView)
|
|
*/
|
|
public static final String FILE_VIEW_CHANGED_PROPERTY = "fileViewChanged";
|
|
|
|
/**
|
|
* The name of the 'file hiding enabled' property.
|
|
* @see #setFileHidingEnabled(boolean)
|
|
*/
|
|
public static final String FILE_HIDING_CHANGED_PROPERTY =
|
|
"FileHidingChanged";
|
|
|
|
/**
|
|
* The name of the 'file filter' property.
|
|
* @see #setFileFilter(FileFilter)
|
|
*/
|
|
public static final String FILE_FILTER_CHANGED_PROPERTY =
|
|
"fileFilterChanged";
|
|
|
|
/**
|
|
* The name of the 'file selection mode' property.
|
|
* @see #setFileSelectionMode(int)
|
|
*/
|
|
public static final String FILE_SELECTION_MODE_CHANGED_PROPERTY =
|
|
"fileSelectionChanged";
|
|
|
|
/**
|
|
* The name of the 'accessory' property.
|
|
* @see #setAccessory(JComponent)
|
|
*/
|
|
public static final String ACCESSORY_CHANGED_PROPERTY =
|
|
"AccessoryChangedProperty";
|
|
|
|
/**
|
|
* The name of the 'accept all file filter used' property.
|
|
* @see #setAcceptAllFileFilterUsed(boolean)
|
|
*/
|
|
public static final String ACCEPT_ALL_FILE_FILTER_USED_CHANGED_PROPERTY =
|
|
"acceptAllFileFilterUsedChanged";
|
|
|
|
/**
|
|
* The name of the 'dialog title' property.
|
|
* @see #setDialogTitle(String)
|
|
*/
|
|
public static final String DIALOG_TITLE_CHANGED_PROPERTY =
|
|
"DialogTitleChangedProperty";
|
|
|
|
/**
|
|
* The name of the 'dialog type' property.
|
|
* @see #setDialogType(int)
|
|
*/
|
|
public static final String DIALOG_TYPE_CHANGED_PROPERTY =
|
|
"DialogTypeChangedProperty";
|
|
|
|
/**
|
|
* The name of the 'choosable file filters' property.
|
|
* @see #addChoosableFileFilter(FileFilter)
|
|
*/
|
|
public static final String CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY =
|
|
"ChoosableFileFilterChangedProperty";
|
|
|
|
/**
|
|
* The accessible context.
|
|
* @see #getAccessibleContext()
|
|
*/
|
|
protected AccessibleContext accessibleContext;
|
|
|
|
/**
|
|
* The file system view.
|
|
* @see #setFileSystemView(FileSystemView)
|
|
*/
|
|
private FileSystemView fsv;
|
|
|
|
/**
|
|
* The accessory component.
|
|
* @see #setAccessory(JComponent)
|
|
*/
|
|
private JComponent accessory;
|
|
|
|
/**
|
|
* The approve button mnemonic.
|
|
* @see #setApproveButtonMnemonic(int)
|
|
*/
|
|
private int approveButtonMnemonic = 0;
|
|
|
|
/**
|
|
* The approve button text.
|
|
* @see #setApproveButtonText(String)
|
|
*/
|
|
private String approveButtonText;
|
|
|
|
/**
|
|
* The approve button tool tip text.
|
|
* @see #setApproveButtonToolTipText(String)
|
|
*/
|
|
private String approveButtonToolTipText;
|
|
|
|
/**
|
|
* The choosable file filters.
|
|
* @see #addChoosableFileFilter(FileFilter)
|
|
*/
|
|
private ArrayList choosableFilters = new ArrayList();
|
|
|
|
/**
|
|
* A flag controlling whether the accept all file filter is used.
|
|
* @see #setAcceptAllFileFilterUsed(boolean)
|
|
*/
|
|
private boolean isAcceptAll = true;
|
|
|
|
/**
|
|
* The dialog title.
|
|
* @see #setDialogTitle(String)
|
|
*/
|
|
private String dialogTitle;
|
|
|
|
/**
|
|
* The dialog type.
|
|
* @see #setDialogType(int)
|
|
*/
|
|
private int dialogType = OPEN_DIALOG;
|
|
|
|
/**
|
|
* The return value for the dialog.
|
|
* @see #showOpenDialog(Component)
|
|
* @see #showSaveDialog(Component)
|
|
*/
|
|
private int retval = ERROR_OPTION;
|
|
|
|
/**
|
|
* A flag indicating whether the file chooser allows multiple selection.
|
|
* @see #isMultiSelectionEnabled()
|
|
*/
|
|
private boolean multiSelection = false;
|
|
|
|
/**
|
|
* A flag indicating whether file hiding is enabled.
|
|
* @see #isFileHidingEnabled()
|
|
*/
|
|
private boolean fileHiding = true;
|
|
|
|
/**
|
|
* The file selection mode.
|
|
* @see #setFileSelectionMode(int)
|
|
*/
|
|
private int fileSelectionMode = FILES_ONLY;
|
|
|
|
/**
|
|
* The file view.
|
|
* @see #setFileView(FileView)
|
|
*/
|
|
private FileView fv = null;
|
|
|
|
/**
|
|
* A flag controlling whether or not the control buttons are visible.
|
|
* @see #setControlButtonsAreShown(boolean)
|
|
*/
|
|
private boolean controlButtonsShown = true;
|
|
|
|
/**
|
|
* The current directory.
|
|
* @see #setCurrentDirectory(File)
|
|
*/
|
|
private File currentDir = null;
|
|
|
|
/**
|
|
* The current file filter.
|
|
* @see #setFileFilter(FileFilter)
|
|
*/
|
|
private FileFilter currentFilter = null;
|
|
|
|
/**
|
|
* An array of selected files.
|
|
* @see #setSelectedFiles(File[])
|
|
*/
|
|
private File[] selectedFiles;
|
|
|
|
/**
|
|
* The selected file.
|
|
* @see #setSelectedFile(File)
|
|
*/
|
|
private File selectedFile;
|
|
|
|
/**
|
|
* The drag enabled property.
|
|
* @see #setDragEnabled(boolean)
|
|
* @see #getDragEnabled()
|
|
*/
|
|
private boolean dragEnabled;
|
|
|
|
/**
|
|
* Creates a new <code>JFileChooser</code> object.
|
|
*/
|
|
public JFileChooser()
|
|
{
|
|
setup(null);
|
|
setCurrentDirectory(null);
|
|
}
|
|
|
|
/**
|
|
* Creates a new <code>JFileChooser</code> object.
|
|
*
|
|
* @param currentDirectoryPath the directory that should initially be
|
|
* shown in the filechooser (if <code>null</code>, the user's home
|
|
* directory is used).
|
|
*/
|
|
public JFileChooser(String currentDirectoryPath)
|
|
{
|
|
this(currentDirectoryPath, null);
|
|
}
|
|
|
|
/**
|
|
* Creates a new <code>JFileChooser</code> object with the specified
|
|
* directory and {@link FileSystemView}.
|
|
*
|
|
* @param currentDirectoryPath the directory that should initially be
|
|
* shown in the filechooser (if <code>null</code>, the user's home
|
|
* directory is used).
|
|
* @param fsv the file system view (if <code>null</code>, the default file
|
|
* system view is used).
|
|
*/
|
|
public JFileChooser(String currentDirectoryPath, FileSystemView fsv)
|
|
{
|
|
setup(fsv);
|
|
File dir = null;
|
|
if (currentDirectoryPath != null)
|
|
dir = getFileSystemView().createFileObject(currentDirectoryPath);
|
|
setCurrentDirectory(dir);
|
|
}
|
|
|
|
/**
|
|
* Creates a new <code>JFileChooser</code> object.
|
|
*
|
|
* @param currentDirectory the directory that should initially be
|
|
* shown in the filechooser (if <code>null</code>, the user's home
|
|
* directory is used).
|
|
*/
|
|
public JFileChooser(File currentDirectory)
|
|
{
|
|
setup(null);
|
|
setCurrentDirectory(currentDirectory);
|
|
}
|
|
|
|
/**
|
|
* Creates a new <code>JFileChooser</code> object.
|
|
*
|
|
* @param fsv the file system view (if <code>null</code>, the default file
|
|
* system view is used).
|
|
*/
|
|
public JFileChooser(FileSystemView fsv)
|
|
{
|
|
setup(fsv);
|
|
setCurrentDirectory(null);
|
|
}
|
|
|
|
/**
|
|
* Creates a new <code>JFileChooser</code> object.
|
|
*
|
|
* @param currentDirectory the directory that should initially be
|
|
* shown in the filechooser (if <code>null</code>, the user's home
|
|
* directory is used).
|
|
* @param fsv the file system view (if <code>null</code>, the default file
|
|
* system view is used).
|
|
*/
|
|
public JFileChooser(File currentDirectory, FileSystemView fsv)
|
|
{
|
|
setup(fsv);
|
|
setCurrentDirectory(currentDirectory);
|
|
}
|
|
|
|
/**
|
|
* Sets up the file chooser. This method is called by all the constructors.
|
|
*
|
|
* @param view the file system view (if <code>null</code>, the default file
|
|
* system view is used).
|
|
*
|
|
* @see FileSystemView#getFileSystemView()
|
|
*/
|
|
protected void setup(FileSystemView view)
|
|
{
|
|
if (view == null)
|
|
view = FileSystemView.getFileSystemView();
|
|
setFileSystemView(view);
|
|
updateUI();
|
|
}
|
|
|
|
/**
|
|
* Sets the dragEnabled property, this disables/enables automatic drag
|
|
* handling (drag and drop) on this component. The default value of the
|
|
* dragEnabled property is false.
|
|
*
|
|
* Some look and feels might not support automatic drag and drop; they
|
|
* will ignore this property.
|
|
*
|
|
* @param b - the new dragEnabled value
|
|
*/
|
|
public void setDragEnabled(boolean b)
|
|
{
|
|
if (b && GraphicsEnvironment.isHeadless())
|
|
throw new HeadlessException();
|
|
|
|
dragEnabled = b;
|
|
}
|
|
|
|
/**
|
|
* Returns true if dragging is enabled.
|
|
*
|
|
* @return true if dragging is enabled.
|
|
*/
|
|
public boolean getDragEnabled()
|
|
{
|
|
return dragEnabled;
|
|
}
|
|
|
|
/**
|
|
* Returns the selected file, if there is one.
|
|
*
|
|
* @return The selected file (possibly <code>null</code>).
|
|
*
|
|
* @see #setSelectedFile(File)
|
|
*/
|
|
public File getSelectedFile()
|
|
{
|
|
return selectedFile;
|
|
}
|
|
|
|
/**
|
|
* Sets the selected file and sends a {@link PropertyChangeEvent} to all
|
|
* registered listeners. The property name is
|
|
* {@link #SELECTED_FILE_CHANGED_PROPERTY}.
|
|
*
|
|
* @param file the file (<code>null</code> permitted).
|
|
*/
|
|
public void setSelectedFile(File file)
|
|
{
|
|
if (selectedFile == null || !selectedFile.equals(file))
|
|
{
|
|
File old = selectedFile;
|
|
selectedFile = file;
|
|
firePropertyChange(SELECTED_FILE_CHANGED_PROPERTY, old, selectedFile);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the selected file or files in an array. If no files are selected,
|
|
* an empty array is returned.
|
|
*
|
|
* @return An array of the selected files (possibly empty).
|
|
*/
|
|
public File[] getSelectedFiles()
|
|
{
|
|
if (selectedFiles != null)
|
|
return selectedFiles;
|
|
if (selectedFile != null)
|
|
return new File[] { selectedFile };
|
|
return new File[0];
|
|
}
|
|
|
|
/**
|
|
* Sets the selected files and sends a {@link PropertyChangeEvent} (with the
|
|
* name {@link #SELECTED_FILES_CHANGED_PROPERTY}) to all registered
|
|
* listeners.
|
|
*
|
|
* @param selectedFiles the selected files (<code>null</code> permitted).
|
|
*/
|
|
public void setSelectedFiles(File[] selectedFiles)
|
|
{
|
|
if (selectedFiles == null)
|
|
selectedFiles = new File[0];
|
|
if (selectedFiles.length > 0)
|
|
setSelectedFile(selectedFiles[0]);
|
|
else
|
|
setSelectedFile(null);
|
|
if (this.selectedFiles != selectedFiles)
|
|
{
|
|
File[] old = this.selectedFiles;
|
|
this.selectedFiles = selectedFiles;
|
|
firePropertyChange(SELECTED_FILES_CHANGED_PROPERTY, old, selectedFiles);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns the current directory.
|
|
*
|
|
* @return The current directory.
|
|
*/
|
|
public File getCurrentDirectory()
|
|
{
|
|
return currentDir;
|
|
}
|
|
|
|
/**
|
|
* Sets the current directory and fires a {@link PropertyChangeEvent} (with
|
|
* the property name {@link #DIRECTORY_CHANGED_PROPERTY}) to all registered
|
|
* listeners. If <code>dir</code> is <code>null</code>, the current
|
|
* directory is set to the default directory returned by the file system
|
|
* view.
|
|
*
|
|
* @param dir the new directory (<code>null</code> permitted).
|
|
*
|
|
* @see FileSystemView#getDefaultDirectory()
|
|
*/
|
|
public void setCurrentDirectory(File dir)
|
|
{
|
|
if (currentDir != dir || dir == null)
|
|
{
|
|
if (dir == null)
|
|
dir = fsv.getDefaultDirectory();
|
|
|
|
File old = currentDir;
|
|
currentDir = dir;
|
|
firePropertyChange(DIRECTORY_CHANGED_PROPERTY, old, currentDir);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Called by the UI delegate when the parent directory is changed.
|
|
*/
|
|
public void changeToParentDirectory()
|
|
{
|
|
setCurrentDirectory(fsv.getParentDirectory(currentDir));
|
|
}
|
|
|
|
/**
|
|
* Rescans the current directory (this is handled by the UI delegate).
|
|
*/
|
|
public void rescanCurrentDirectory()
|
|
{
|
|
getUI().rescanCurrentDirectory(this);
|
|
}
|
|
|
|
/**
|
|
* Ensures the the specified file is visible (this is handled by the
|
|
* UI delegate).
|
|
*
|
|
* @param f the file.
|
|
*/
|
|
public void ensureFileIsVisible(File f)
|
|
{
|
|
getUI().ensureFileIsVisible(this, f);
|
|
}
|
|
|
|
/**
|
|
* Displays the file chooser in a modal dialog using the
|
|
* {@link #OPEN_DIALOG} type.
|
|
*
|
|
* @param parent the parent component.
|
|
*
|
|
* @return A return value indicating how the dialog was closed (one of
|
|
* {@link #APPROVE_OPTION}, {@link #CANCEL_OPTION} and
|
|
* {@link #ERROR_OPTION}).
|
|
*
|
|
* @throws HeadlessException DOCUMENT ME!
|
|
*/
|
|
public int showOpenDialog(Component parent) throws HeadlessException
|
|
{
|
|
JDialog d = createDialog(parent);
|
|
|
|
// FIXME: Remove when we get ancestor property
|
|
d.setTitle("Open");
|
|
setDialogType(OPEN_DIALOG);
|
|
|
|
retval = ERROR_OPTION;
|
|
|
|
d.pack();
|
|
d.show();
|
|
return retval;
|
|
}
|
|
|
|
/**
|
|
* Displays the file chooser in a modal dialog using the
|
|
* {@link #SAVE_DIALOG} type.
|
|
*
|
|
* @param parent the parent component.
|
|
*
|
|
* @return A return value indicating how the dialog was closed (one of
|
|
* {@link #APPROVE_OPTION}, {@link #CANCEL_OPTION} and
|
|
* {@link #ERROR_OPTION}).
|
|
*
|
|
* @throws HeadlessException DOCUMENT ME!
|
|
*/
|
|
public int showSaveDialog(Component parent) throws HeadlessException
|
|
{
|
|
JDialog d = createDialog(parent);
|
|
setDialogType(SAVE_DIALOG);
|
|
|
|
retval = ERROR_OPTION;
|
|
|
|
d.pack();
|
|
d.show();
|
|
return retval;
|
|
}
|
|
|
|
/**
|
|
* Displays the file chooser in a modal dialog using the
|
|
* {@link #CUSTOM_DIALOG} type.
|
|
*
|
|
* @param parent the parent component.
|
|
*
|
|
* @return A return value indicating how the dialog was closed (one of
|
|
* {@link #APPROVE_OPTION}, {@link #CANCEL_OPTION} and
|
|
* {@link #ERROR_OPTION}).
|
|
*
|
|
* @throws HeadlessException DOCUMENT ME!
|
|
*/
|
|
public int showDialog(Component parent, String approveButtonText)
|
|
throws HeadlessException
|
|
{
|
|
JDialog d = createDialog(parent);
|
|
setApproveButtonText(approveButtonText);
|
|
setDialogType(CUSTOM_DIALOG);
|
|
|
|
retval = ERROR_OPTION;
|
|
|
|
d.pack();
|
|
d.show();
|
|
return retval;
|
|
}
|
|
|
|
/**
|
|
* Creates a modal dialog in which to display the file chooser.
|
|
*
|
|
* @param parent the parent component.
|
|
*
|
|
* @return The dialog.
|
|
*
|
|
* @throws HeadlessException DOCUMENT ME!
|
|
*/
|
|
protected JDialog createDialog(Component parent) throws HeadlessException
|
|
{
|
|
Frame toUse = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, parent);
|
|
if (toUse == null)
|
|
toUse = (Frame) SwingUtilities.getOwnerFrame(null);
|
|
|
|
JDialog dialog = new JDialog(toUse);
|
|
setSelectedFile(null);
|
|
dialog.getContentPane().add(this);
|
|
dialog.addWindowListener( new WindowAdapter()
|
|
{
|
|
public void windowClosing(WindowEvent e)
|
|
{
|
|
cancelSelection();
|
|
}
|
|
});
|
|
dialog.setModal(true);
|
|
dialog.invalidate();
|
|
dialog.repaint();
|
|
return dialog;
|
|
}
|
|
|
|
/**
|
|
* Returns the flag that controls whether or not the control buttons are
|
|
* shown on the file chooser.
|
|
*
|
|
* @return A boolean.
|
|
*
|
|
* @see #setControlButtonsAreShown(boolean)
|
|
*/
|
|
public boolean getControlButtonsAreShown()
|
|
{
|
|
return controlButtonsShown;
|
|
}
|
|
|
|
/**
|
|
* Sets the flag that controls whether or not the control buttons are
|
|
* shown and, if it changes, sends a {@link PropertyChangeEvent} (with the
|
|
* property name {@link #CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY}) to
|
|
* all registered listeners.
|
|
*
|
|
* @param b the new value for the flag.
|
|
*/
|
|
public void setControlButtonsAreShown(boolean b)
|
|
{
|
|
if (controlButtonsShown != b)
|
|
{
|
|
controlButtonsShown = b;
|
|
firePropertyChange(CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY,
|
|
! controlButtonsShown, controlButtonsShown);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the type of file chooser.
|
|
*
|
|
* @return {@link #OPEN_DIALOG}, {@link #SAVE_DIALOG} or
|
|
* {@link #CUSTOM_DIALOG}.
|
|
*
|
|
* @see #setDialogType(int)
|
|
*/
|
|
public int getDialogType()
|
|
{
|
|
return dialogType;
|
|
}
|
|
|
|
/**
|
|
* Sets the dialog type and fires a {@link PropertyChangeEvent} (with the
|
|
* property name {@link #DIALOG_TYPE_CHANGED_PROPERTY}) to all
|
|
* registered listeners.
|
|
*
|
|
* @param dialogType the dialog type (one of: {@link #OPEN_DIALOG},
|
|
* {@link #SAVE_DIALOG}, {@link #CUSTOM_DIALOG}).
|
|
*
|
|
* @throws IllegalArgumentException if <code>dialogType</code> is not valid.
|
|
*/
|
|
public void setDialogType(int dialogType)
|
|
{
|
|
if (dialogType != OPEN_DIALOG && dialogType != SAVE_DIALOG
|
|
&& dialogType != CUSTOM_DIALOG)
|
|
throw new IllegalArgumentException("Choose allowable dialogType.");
|
|
|
|
if (this.dialogType != dialogType)
|
|
{
|
|
int old = this.dialogType;
|
|
this.dialogType = dialogType;
|
|
firePropertyChange(DIALOG_TYPE_CHANGED_PROPERTY, old, this.dialogType);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets the dialog title and sends a {@link PropertyChangeEvent} (with the
|
|
* property name {@link #DIALOG_TITLE_CHANGED_PROPERTY}) to all
|
|
* registered listeners.
|
|
*
|
|
* @param dialogTitle the dialog title (<code>null</code> permitted).
|
|
*
|
|
* @see #getDialogTitle()
|
|
*/
|
|
public void setDialogTitle(String dialogTitle)
|
|
{
|
|
if (this.dialogTitle != dialogTitle)
|
|
{
|
|
String old = this.dialogTitle;
|
|
this.dialogTitle = dialogTitle;
|
|
firePropertyChange(DIALOG_TITLE_CHANGED_PROPERTY, old, this.dialogTitle);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the dialog title.
|
|
*
|
|
* @return The dialog title (possibly <code>null</code>).
|
|
*
|
|
* @see #setDialogTitle(String)
|
|
*/
|
|
public String getDialogTitle()
|
|
{
|
|
return dialogTitle;
|
|
}
|
|
|
|
/**
|
|
* Sets the tool tip text for the approve button and sends a
|
|
* {@link PropertyChangeEvent} (with the property name
|
|
* {@link #APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY}) to all
|
|
* registered listeners.
|
|
*
|
|
* @param toolTipText the text.
|
|
*/
|
|
public void setApproveButtonToolTipText(String toolTipText)
|
|
{
|
|
if (approveButtonToolTipText != toolTipText)
|
|
{
|
|
String oldText = approveButtonToolTipText;
|
|
approveButtonToolTipText = toolTipText;
|
|
firePropertyChange(APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY,
|
|
oldText, approveButtonToolTipText);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the tool tip text for the approve button.
|
|
*
|
|
* @return The tool tip text for the approve button.
|
|
*
|
|
* @see #setApproveButtonToolTipText(String)
|
|
*/
|
|
public String getApproveButtonToolTipText()
|
|
{
|
|
return approveButtonToolTipText;
|
|
}
|
|
|
|
/**
|
|
* Returns the approve button mnemonic, or zero if no mnemonic has been set.
|
|
*
|
|
* @return The approve button mnemonic.
|
|
*
|
|
* @see #setApproveButtonMnemonic(int)
|
|
*/
|
|
public int getApproveButtonMnemonic()
|
|
{
|
|
return approveButtonMnemonic;
|
|
}
|
|
|
|
/**
|
|
* Sets the mnemonic for the approve button and sends a
|
|
* {@link PropertyChangeEvent} (with the property name
|
|
* {@link #APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY}) to all registered
|
|
* listeners.
|
|
*
|
|
* @param mnemonic the mnemonic.
|
|
*
|
|
* @see #setApproveButtonMnemonic(char)
|
|
*/
|
|
public void setApproveButtonMnemonic(int mnemonic)
|
|
{
|
|
if (approveButtonMnemonic != mnemonic)
|
|
{
|
|
int oldMnemonic = approveButtonMnemonic;
|
|
approveButtonMnemonic = mnemonic;
|
|
firePropertyChange(APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY,
|
|
oldMnemonic, approveButtonMnemonic);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets the mnemonic for the approve button and sends a
|
|
* {@link PropertyChangeEvent} (with the property name
|
|
* {@link #APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY}) to all registered
|
|
* listeners.
|
|
*
|
|
* @param mnemonic the mnemonic.
|
|
*
|
|
* @see #setApproveButtonMnemonic(int)
|
|
*/
|
|
public void setApproveButtonMnemonic(char mnemonic)
|
|
{
|
|
setApproveButtonMnemonic((int) Character.toUpperCase(mnemonic));
|
|
}
|
|
|
|
/**
|
|
* Sets the approve button text and fires a {@link PropertyChangeEvent}
|
|
* (with the property name {@link #APPROVE_BUTTON_TEXT_CHANGED_PROPERTY}) to
|
|
* all registered listeners.
|
|
*
|
|
* @param approveButtonText the text (<code>null</code> permitted).
|
|
*
|
|
* @see #getApproveButtonText()
|
|
*/
|
|
public void setApproveButtonText(String approveButtonText)
|
|
{
|
|
if (this.approveButtonText != approveButtonText)
|
|
{
|
|
String oldText = this.approveButtonText;
|
|
this.approveButtonText = approveButtonText;
|
|
firePropertyChange(APPROVE_BUTTON_TEXT_CHANGED_PROPERTY, oldText,
|
|
this.approveButtonText);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the approve button text.
|
|
*
|
|
* @return The approve button text (possibly <code>null</code>).
|
|
*
|
|
* @see #setApproveButtonText(String)
|
|
*/
|
|
public String getApproveButtonText()
|
|
{
|
|
return approveButtonText;
|
|
}
|
|
|
|
/**
|
|
* Returns the available file filters for this file chooser.
|
|
*
|
|
* @return The available file filters.
|
|
*/
|
|
public FileFilter[] getChoosableFileFilters()
|
|
{
|
|
return (FileFilter[]) choosableFilters.toArray(new FileFilter[choosableFilters.size()]);
|
|
}
|
|
|
|
/**
|
|
* Adds a file filter to the list of available filters and sends a
|
|
* {@link PropertyChangeEvent} (with the property name
|
|
* {@link #CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY}) to all registered
|
|
* listeners.
|
|
*
|
|
* @param filter the filter (<code>null</code> permitted).
|
|
*/
|
|
public void addChoosableFileFilter(FileFilter filter)
|
|
{
|
|
if (filter != null)
|
|
{
|
|
FileFilter[] old = getChoosableFileFilters();
|
|
choosableFilters.add(filter);
|
|
FileFilter[] newFilters = getChoosableFileFilters();
|
|
firePropertyChange(CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY, old,
|
|
newFilters);
|
|
}
|
|
setFileFilter(filter);
|
|
}
|
|
|
|
/**
|
|
* Removes a file filter from the list of available filters and sends a
|
|
* {@link PropertyChangeEvent} (with the property name
|
|
* {@link #CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY}) to all registered
|
|
* listeners.
|
|
*
|
|
* @param f the file filter.
|
|
*
|
|
* @return <code>true</code> if the filter was removed and
|
|
* <code>false</code> otherwise.
|
|
*/
|
|
public boolean removeChoosableFileFilter(FileFilter f)
|
|
{
|
|
if (f == currentFilter)
|
|
setFileFilter(null);
|
|
FileFilter[] old = getChoosableFileFilters();
|
|
if (! choosableFilters.remove(f))
|
|
return false;
|
|
FileFilter[] newFilters = getChoosableFileFilters();
|
|
firePropertyChange(CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY, old, newFilters);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Clears the list of choosable file filters and installs the 'accept all'
|
|
* filter from the UI delegate.
|
|
*/
|
|
public void resetChoosableFileFilters()
|
|
{
|
|
choosableFilters.clear();
|
|
choosableFilters.add(getUI().getAcceptAllFileFilter(this));
|
|
setFileFilter((FileFilter) choosableFilters.get(0));
|
|
}
|
|
|
|
/**
|
|
* Returns the 'accept all' file filter from the UI delegate.
|
|
*
|
|
* @return The 'accept all' file filter.
|
|
*/
|
|
public FileFilter getAcceptAllFileFilter()
|
|
{
|
|
return getUI().getAcceptAllFileFilter(this);
|
|
}
|
|
|
|
/**
|
|
* Returns the flag that controls whether or not the 'accept all' file
|
|
* filter is included in the list of filters.
|
|
*
|
|
* @return A boolean.
|
|
*
|
|
* @see #setAcceptAllFileFilterUsed(boolean)
|
|
*/
|
|
public boolean isAcceptAllFileFilterUsed()
|
|
{
|
|
return isAcceptAll;
|
|
}
|
|
|
|
/**
|
|
* Sets the flag that controls whether or not the 'accept all' file filter
|
|
* is included in the list of filters, and sends a
|
|
* {@link PropertyChangeEvent} (with the property name
|
|
* {@link #ACCEPT_ALL_FILE_FILTER_USED_CHANGED_PROPERTY}) to all registered
|
|
* listeners.
|
|
*
|
|
* @param b the new value of the flag.
|
|
*/
|
|
public void setAcceptAllFileFilterUsed(boolean b)
|
|
{
|
|
if (isAcceptAll != b)
|
|
{
|
|
isAcceptAll = b;
|
|
if (b)
|
|
addChoosableFileFilter(getAcceptAllFileFilter());
|
|
else
|
|
removeChoosableFileFilter(getAcceptAllFileFilter());
|
|
firePropertyChange(ACCEPT_ALL_FILE_FILTER_USED_CHANGED_PROPERTY,
|
|
! isAcceptAll, isAcceptAll);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the accessory component for the file chooser. The default
|
|
* value is <code>null</code>.
|
|
*
|
|
* @return The accessory component (possibly <code>null</code>).
|
|
*
|
|
* @see #setAccessory(JComponent)
|
|
*/
|
|
public JComponent getAccessory()
|
|
{
|
|
return accessory;
|
|
}
|
|
|
|
/**
|
|
* Sets the accessory component for the file chooser and sends a
|
|
* {@link PropertyChangeEvent} to all registered listeners. The property
|
|
* name is {@link #ACCESSORY_CHANGED_PROPERTY}.
|
|
*
|
|
* @param newAccessory the accessory component.
|
|
*/
|
|
public void setAccessory(JComponent newAccessory)
|
|
{
|
|
if (accessory != newAccessory)
|
|
{
|
|
JComponent old = accessory;
|
|
accessory = newAccessory;
|
|
firePropertyChange(ACCESSORY_CHANGED_PROPERTY, old, accessory);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets the file selection mode and sends a {@link PropertyChangeEvent}
|
|
* to all registered listeners. The property name is
|
|
* {@link #FILE_SELECTION_MODE_CHANGED_PROPERTY}.
|
|
*
|
|
* @param mode the mode ({@link #FILES_ONLY}, {@link #DIRECTORIES_ONLY} or
|
|
* {@link #FILES_AND_DIRECTORIES}).
|
|
*
|
|
* @throws IllegalArgumentException if the mode is invalid.
|
|
*/
|
|
public void setFileSelectionMode(int mode)
|
|
{
|
|
if (mode != FILES_ONLY && mode != DIRECTORIES_ONLY
|
|
&& mode != FILES_AND_DIRECTORIES)
|
|
throw new IllegalArgumentException("Choose a correct file selection mode.");
|
|
if (fileSelectionMode != mode)
|
|
{
|
|
int old = fileSelectionMode;
|
|
fileSelectionMode = mode;
|
|
firePropertyChange(FILE_SELECTION_MODE_CHANGED_PROPERTY, old,
|
|
fileSelectionMode);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the file selection mode, one of: {@link #FILES_ONLY},
|
|
* {@link #DIRECTORIES_ONLY} or {@link #FILES_AND_DIRECTORIES}. The
|
|
* default is {@link #FILES_ONLY}.
|
|
*
|
|
* @return The file selection mode.
|
|
*
|
|
* @see #setFileSelectionMode(int)
|
|
*/
|
|
public int getFileSelectionMode()
|
|
{
|
|
return fileSelectionMode;
|
|
}
|
|
|
|
/**
|
|
* Returns <code>true</code> if file selection is enabled, and
|
|
* <code>false</code> otherwise. File selection is enabled when the
|
|
* file selection mode is {@link #FILES_ONLY} or
|
|
* {@link #FILES_AND_DIRECTORIES}.
|
|
*
|
|
* @return <code>true</code> if file selection is enabled.
|
|
*
|
|
* @see #getFileSelectionMode()
|
|
*/
|
|
public boolean isFileSelectionEnabled()
|
|
{
|
|
return (fileSelectionMode == FILES_ONLY
|
|
|| fileSelectionMode == FILES_AND_DIRECTORIES);
|
|
}
|
|
|
|
/**
|
|
* Returns <code>true</code> if directory selection is enabled, and
|
|
* <code>false</code> otherwise. Directory selection is enabled when the
|
|
* file selection mode is {@link #DIRECTORIES_ONLY} or
|
|
* {@link #FILES_AND_DIRECTORIES}.
|
|
*
|
|
* @return <code>true</code> if file selection is enabled.
|
|
*
|
|
* @see #getFileSelectionMode()
|
|
*/
|
|
public boolean isDirectorySelectionEnabled()
|
|
{
|
|
return (fileSelectionMode == DIRECTORIES_ONLY
|
|
|| fileSelectionMode == FILES_AND_DIRECTORIES);
|
|
}
|
|
|
|
/**
|
|
* Sets the flag that controls whether multiple selections are allowed in
|
|
* this filechooser and sends a {@link PropertyChangeEvent} (with the
|
|
* property name {@link #MULTI_SELECTION_ENABLED_CHANGED_PROPERTY}) to all
|
|
* registered listeners.
|
|
*
|
|
* @param b the new value of the flag.
|
|
*/
|
|
public void setMultiSelectionEnabled(boolean b)
|
|
{
|
|
if (multiSelection != b)
|
|
{
|
|
multiSelection = b;
|
|
firePropertyChange(MULTI_SELECTION_ENABLED_CHANGED_PROPERTY,
|
|
! multiSelection, multiSelection);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns <code>true</code> if multiple selections are allowed within this
|
|
* file chooser, and <code>false</code> otherwise.
|
|
*
|
|
* @return A boolean.
|
|
*
|
|
* @see #setMultiSelectionEnabled(boolean)
|
|
*/
|
|
public boolean isMultiSelectionEnabled()
|
|
{
|
|
return multiSelection;
|
|
}
|
|
|
|
/**
|
|
* Returns <code>true</code> if hidden files are to be hidden, and
|
|
* <code>false</code> otherwise.
|
|
*
|
|
* @return A boolean.
|
|
*
|
|
* @see #setFileHidingEnabled(boolean)
|
|
*/
|
|
public boolean isFileHidingEnabled()
|
|
{
|
|
return fileHiding;
|
|
}
|
|
|
|
/**
|
|
* Sets the flag that controls whether or not hidden files are displayed,
|
|
* and sends a {@link PropertyChangeEvent} (with the property name
|
|
* {@link #FILE_HIDING_CHANGED_PROPERTY}) to all registered listeners.
|
|
*
|
|
* @param b the new value of the flag.
|
|
*/
|
|
public void setFileHidingEnabled(boolean b)
|
|
{
|
|
if (fileHiding != b)
|
|
{
|
|
fileHiding = b;
|
|
firePropertyChange(FILE_HIDING_CHANGED_PROPERTY, ! fileHiding,
|
|
fileHiding);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets the file filter and sends a {@link PropertyChangeEvent} (with the
|
|
* property name {@link #FILE_FILTER_CHANGED_PROPERTY}) to all registered
|
|
* listeners.
|
|
*
|
|
* @param filter the filter (<code>null</code> permitted).
|
|
*/
|
|
public void setFileFilter(FileFilter filter)
|
|
{
|
|
if (currentFilter != filter)
|
|
{
|
|
if (filter != null && !choosableFilters.contains(filter))
|
|
addChoosableFileFilter(filter);
|
|
FileFilter old = currentFilter;
|
|
currentFilter = filter;
|
|
firePropertyChange(FILE_FILTER_CHANGED_PROPERTY, old, currentFilter);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the file filter.
|
|
*
|
|
* @return The file filter.
|
|
*
|
|
* @see #setFileFilter(FileFilter)
|
|
*/
|
|
public FileFilter getFileFilter()
|
|
{
|
|
return currentFilter;
|
|
}
|
|
|
|
/**
|
|
* Sets a custom {@link FileView} for the file chooser and sends a
|
|
* {@link PropertyChangeEvent} to all registered listeners. The property
|
|
* name is {@link #FILE_VIEW_CHANGED_PROPERTY}.
|
|
*
|
|
* @param fileView the file view (<code>null</code> permitted).
|
|
*
|
|
* @see #getFileView()
|
|
*/
|
|
public void setFileView(FileView fileView)
|
|
{
|
|
if (fv != fileView)
|
|
{
|
|
FileView old = fv;
|
|
fv = fileView;
|
|
firePropertyChange(FILE_VIEW_CHANGED_PROPERTY, old, fv);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the custom {@link FileView} for the file chooser.
|
|
*
|
|
* @return The file view (possibly <code>null</code>).
|
|
*/
|
|
public FileView getFileView()
|
|
{
|
|
return fv;
|
|
}
|
|
|
|
/**
|
|
* Returns the name of the file, generated by the current (or default)
|
|
* {@link FileView}.
|
|
*
|
|
* @param f the file.
|
|
*
|
|
* @return The file name.
|
|
*/
|
|
public String getName(File f)
|
|
{
|
|
String name = null;
|
|
if (fv != null)
|
|
name = fv.getName(f);
|
|
if (name == null)
|
|
name = getUI().getFileView(this).getName(f);
|
|
return name;
|
|
}
|
|
|
|
/**
|
|
* Returns the description of the file, generated by the current (or default)
|
|
* {@link FileView}.
|
|
*
|
|
* @param f the file.
|
|
*
|
|
* @return The file description.
|
|
*/
|
|
public String getDescription(File f)
|
|
{
|
|
String result = null;
|
|
if (fv != null)
|
|
result = fv.getDescription(f);
|
|
if (result == null)
|
|
result = getUI().getFileView(this).getDescription(f);
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Returns the type description for the file, generated by the current (or
|
|
* default) {@link FileView}.
|
|
*
|
|
* @param f the file.
|
|
*
|
|
* @return The file type description.
|
|
*/
|
|
public String getTypeDescription(File f)
|
|
{
|
|
String result = null;
|
|
if (fv != null)
|
|
result = getFileView().getTypeDescription(f);
|
|
if (result == null)
|
|
result = getUI().getFileView(this).getTypeDescription(f);
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Returns the icon provided by the current (or default) {@link FileView}.
|
|
*
|
|
* @param f the file.
|
|
*
|
|
* @return An icon representing the file.
|
|
*/
|
|
public Icon getIcon(File f)
|
|
{
|
|
Icon result = null;
|
|
if (fv != null)
|
|
result = fv.getIcon(f);
|
|
if (result == null)
|
|
result = getUI().getFileView(this).getIcon(f);
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Returns <code>true</code> if the file is traversable, and
|
|
* <code>false</code> otherwise.
|
|
*
|
|
* @param f the file or directory.
|
|
*
|
|
* @return A boolean.
|
|
*/
|
|
public boolean isTraversable(File f)
|
|
{
|
|
return getFileSystemView().isTraversable(f).booleanValue();
|
|
}
|
|
|
|
/**
|
|
* Returns <code>true</code> if the file is accepted by the current
|
|
* file filter.
|
|
*
|
|
* @param f the file.
|
|
*
|
|
* @return A boolean.
|
|
*/
|
|
public boolean accept(File f)
|
|
{
|
|
if (f == null)
|
|
return true;
|
|
FileFilter ff = getFileFilter();
|
|
if (ff != null)
|
|
return ff.accept(f);
|
|
else
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Sets the file system view for the file chooser and sends a
|
|
* {@link PropertyChangeEvent} to all registered listeners.
|
|
*
|
|
* @param fsv the file system view.
|
|
*/
|
|
public void setFileSystemView(FileSystemView fsv)
|
|
{
|
|
if (this.fsv != fsv)
|
|
{
|
|
FileSystemView old = this.fsv;
|
|
this.fsv = fsv;
|
|
firePropertyChange(FILE_SYSTEM_VIEW_CHANGED_PROPERTY, old, this.fsv);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the file system view being used by this file chooser.
|
|
*
|
|
* @return The file system view.
|
|
*
|
|
* @see #setFileSystemView(FileSystemView)
|
|
*/
|
|
public FileSystemView getFileSystemView()
|
|
{
|
|
return fsv;
|
|
}
|
|
|
|
/**
|
|
* Approves the selection. An {@link ActionEvent} is sent to all registered
|
|
* listeners.
|
|
*/
|
|
public void approveSelection()
|
|
{
|
|
retval = APPROVE_OPTION;
|
|
fireActionPerformed(APPROVE_SELECTION);
|
|
}
|
|
|
|
/**
|
|
* Cancels the selection. An {@link ActionEvent} is sent to all registered
|
|
* listeners.
|
|
*/
|
|
public void cancelSelection()
|
|
{
|
|
retval = CANCEL_OPTION;
|
|
fireActionPerformed(CANCEL_SELECTION);
|
|
}
|
|
|
|
/**
|
|
* Adds an {@link ActionListener} to the file chooser.
|
|
*
|
|
* @param l the listener.
|
|
*/
|
|
public void addActionListener(ActionListener l)
|
|
{
|
|
listenerList.add(ActionListener.class, l);
|
|
}
|
|
|
|
/**
|
|
* Removes an {@link ActionListener} from this file chooser.
|
|
*
|
|
* @param l the listener.
|
|
*/
|
|
public void removeActionListener(ActionListener l)
|
|
{
|
|
try
|
|
{
|
|
listenerList.remove(ActionListener.class, l);
|
|
}
|
|
catch (IllegalArgumentException e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the action listeners registered with this file chooser.
|
|
*
|
|
* @return An array of listeners.
|
|
*/
|
|
public ActionListener[] getActionListeners()
|
|
{
|
|
return (ActionListener[]) getListeners(ActionListener.class);
|
|
}
|
|
|
|
/**
|
|
* Sends an @link {ActionEvent} to all registered listeners.
|
|
*
|
|
* @param command the action command.
|
|
*/
|
|
protected void fireActionPerformed(String command)
|
|
{
|
|
ActionListener[] list = getActionListeners();
|
|
ActionEvent event = new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
|
|
command);
|
|
|
|
for (int i = 0; i < list.length; i++)
|
|
list[i].actionPerformed(event);
|
|
}
|
|
|
|
/**
|
|
* Installs the UI delegate for the current look and feel.
|
|
*/
|
|
public void updateUI()
|
|
{
|
|
setUI((FileChooserUI) UIManager.getUI(this));
|
|
}
|
|
|
|
/**
|
|
* Returns the UI delegate class identifier.
|
|
*
|
|
* @return <code>FileChooserUI</code>.
|
|
*/
|
|
public String getUIClassID()
|
|
{
|
|
return "FileChooserUI";
|
|
}
|
|
|
|
/**
|
|
* Returns the UI delegate for the component.
|
|
*
|
|
* @return The UI delegate.
|
|
*/
|
|
public FileChooserUI getUI()
|
|
{
|
|
return (FileChooserUI) ui;
|
|
}
|
|
|
|
/**
|
|
* Returns a string describing the attributes for the
|
|
* <code>JFileChooser</code> component, for use in debugging. The return
|
|
* value is guaranteed to be non-<code>null</code>, but the format of the
|
|
* string may vary between implementations.
|
|
*
|
|
* @return A string describing the attributes of the
|
|
* <code>JFileChooser</code>.
|
|
*/
|
|
protected String paramString()
|
|
{
|
|
CPStringBuilder sb = new CPStringBuilder(super.paramString());
|
|
sb.append(",approveButtonText=");
|
|
if (approveButtonText != null)
|
|
sb.append(approveButtonText);
|
|
sb.append(",currentDirectory=");
|
|
if (currentDir != null)
|
|
sb.append(currentDir);
|
|
sb.append(",dialogTitle=");
|
|
if (dialogTitle != null)
|
|
sb.append(dialogTitle);
|
|
sb.append(",dialogType=");
|
|
if (dialogType == OPEN_DIALOG)
|
|
sb.append("OPEN_DIALOG");
|
|
if (dialogType == SAVE_DIALOG)
|
|
sb.append("SAVE_DIALOG");
|
|
if (dialogType == CUSTOM_DIALOG)
|
|
sb.append("CUSTOM_DIALOG");
|
|
sb.append(",fileSelectionMode=");
|
|
if (fileSelectionMode == FILES_ONLY)
|
|
sb.append("FILES_ONLY");
|
|
if (fileSelectionMode == DIRECTORIES_ONLY)
|
|
sb.append("DIRECTORIES_ONLY");
|
|
if (fileSelectionMode == FILES_AND_DIRECTORIES)
|
|
sb.append("FILES_AND_DIRECTORIES");
|
|
sb.append(",returnValue=");
|
|
if (retval == APPROVE_OPTION)
|
|
sb.append("APPROVE_OPTION");
|
|
if (retval == CANCEL_OPTION)
|
|
sb.append("CANCEL_OPTION");
|
|
if (retval == ERROR_OPTION)
|
|
sb.append("ERROR_OPTION");
|
|
sb.append(",selectedFile=");
|
|
if (selectedFile != null)
|
|
sb.append(selectedFile);
|
|
sb.append(",useFileHiding=").append(fileHiding);
|
|
return sb.toString();
|
|
}
|
|
|
|
/**
|
|
* Returns the object that provides accessibility features for this
|
|
* <code>JFileChooser</code> component.
|
|
*
|
|
* @return The accessible context (an instance of
|
|
* {@link AccessibleJFileChooser}).
|
|
*/
|
|
public AccessibleContext getAccessibleContext()
|
|
{
|
|
if (accessibleContext == null)
|
|
accessibleContext = new AccessibleJFileChooser();
|
|
return accessibleContext;
|
|
}
|
|
|
|
/**
|
|
* Provides the accessibility features for the <code>JFileChooser</code>
|
|
* component.
|
|
*/
|
|
protected class AccessibleJFileChooser
|
|
extends JComponent.AccessibleJComponent
|
|
{
|
|
/**
|
|
* Creates a new instance of <code>AccessibleJFileChooser</code>.
|
|
*/
|
|
protected AccessibleJFileChooser()
|
|
{
|
|
// Nothing to do here.
|
|
}
|
|
|
|
/**
|
|
* Returns the accessible role for the <code>JFileChooser</code>
|
|
* component.
|
|
*
|
|
* @return {@link AccessibleRole#FILE_CHOOSER}.
|
|
*/
|
|
public AccessibleRole getAccessibleRole()
|
|
{
|
|
return AccessibleRole.FILE_CHOOSER;
|
|
}
|
|
}
|
|
}
|