package name.admitriev.jhelper.ui;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.vfs.VirtualFile;
import name.admitriev.jhelper.generation.FileUtils;
public class RelativeFileChooserDescriptor extends FileChooserDescriptor {
private String basePath;
private RelativeFileChooserDescriptor(
VirtualFile baseDir,
boolean chooseFiles,
boolean chooseFolders
) {
super(chooseFiles, chooseFolders, false, false, false, false);
basePath = baseDir.getPath();
withShowHiddenFiles(true);
setRoots(baseDir);
}
@Override
public boolean isFileSelectable(VirtualFile file) {
return super.isFileSelectable(file) && FileUtils.isChild(
basePath,
file.getPath()
);
}
@Override
public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) {
return super.isFileVisible(file, showHiddenFiles) && (
FileUtils.isChild(basePath, file.getPath()) || FileUtils.isChild(file.getPath(), basePath)
);
}
public static RelativeFileChooserDescriptor fileChooser(VirtualFile baseDir) {
return new RelativeFileChooserDescriptor(baseDir, true, false);
}
public static RelativeFileChooserDescriptor directoryChooser(VirtualFile baseDir) {
return new RelativeFileChooserDescriptor(baseDir, false, true);
}
}