summaryrefslogtreecommitdiff
path: root/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java')
-rw-r--r--platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java54
1 files changed, 36 insertions, 18 deletions
diff --git a/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java b/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java
index c19173c7e906..7509394a2368 100644
--- a/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java
+++ b/platform/platform-api/src/com/intellij/openapi/fileChooser/FileChooserDescriptor.java
@@ -18,6 +18,7 @@ package com.intellij.openapi.fileChooser;
import com.intellij.openapi.actionSystem.DataKey;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.FileTypes;
+import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Iconable;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.VFileProperty;
@@ -51,6 +52,7 @@ public class FileChooserDescriptor implements Cloneable {
private boolean myShowFileSystemRoots = true;
private boolean myTreeRootVisible = false;
private boolean myShowHiddenFiles = false;
+ private Condition<VirtualFile> myFileFilter = null;
private final Map<String, Object> myUserData = new HashMap<String, Object>();
@@ -218,18 +220,15 @@ public class FileChooserDescriptor implements Cloneable {
}
/**
- * Defines whether file can be chosen or not
+ * Sets simple boolean condition for use in {@link #isFileVisible(VirtualFile, boolean)} and {@link #isFileSelectable(VirtualFile)}.
*/
- public boolean isFileSelectable(VirtualFile file) {
- if (file == null) return false;
- if (file.isDirectory() && myChooseFolders) return true;
- if (acceptAsJarFile(file)) return true;
- if (acceptAsGeneralFile(file)) return true;
- return false;
+ public FileChooserDescriptor withFileFilter(@Nullable Condition<VirtualFile> filter) {
+ myFileFilter = filter;
+ return this;
}
/**
- * Defines whether file is visible in the tree
+ * Defines whether a file is visible in the tree.
*/
public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) {
if (!file.isDirectory()) {
@@ -238,28 +237,47 @@ public class FileChooserDescriptor implements Cloneable {
return false;
}
}
- else {
- if (!myChooseFiles) {
- return false;
- }
+ else if (!myChooseFiles) {
+ return false;
+ }
+ if (myFileFilter != null && !myFileFilter.value(file)) {
+ return false;
}
}
- // do not include ignored files
if (isHideIgnored() && FileTypeManager.getInstance().isFileIgnored(file)) {
return false;
}
- // do not include hidden files
- if (!showHiddenFiles) {
- if (FileElement.isFileHidden(file)) {
- return false;
- }
+ if (!showHiddenFiles && FileElement.isFileHidden(file)) {
+ return false;
}
return true;
}
+ /**
+ * Defines whether a file can be chosen.
+ */
+ public boolean isFileSelectable(VirtualFile file) {
+ if (file == null) return false;
+
+ if (file.isDirectory() && myChooseFolders) {
+ return true;
+ }
+ if (acceptAsJarFile(file)) {
+ return true;
+ }
+ if (acceptAsGeneralFile(file)) {
+ return true;
+ }
+ if (myFileFilter != null && !file.isDirectory() && myFileFilter.value(file)) {
+ return true;
+ }
+
+ return false;
+ }
+
public Icon getIcon(final VirtualFile file) {
if (file.isDirectory()) {
return dressIcon(file, PlatformIcons.DIRECTORY_CLOSED_ICON);