mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-02 11:05:29 -04:00
Added sandbox-swing to sandbox.
This commit is contained in:
parent
724d893ea6
commit
c982203361
@ -21,6 +21,7 @@
|
||||
|
||||
<modules>
|
||||
<module>sandbox-common</module>
|
||||
<module>sandbox-swing</module>
|
||||
</modules>
|
||||
|
||||
<dependencies>
|
||||
|
18
sandbox/sandbox-swing/pom.xml
Normal file
18
sandbox/sandbox-swing/pom.xml
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.twelvemonkeys.sandbox</groupId>
|
||||
<artifactId>sandbox</artifactId>
|
||||
<version>3.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>sandbox-swing</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>TwelveMonkeys :: Sandbox :: Swing</name>
|
||||
<description>
|
||||
The TwelveMonkeys Sandbox Swing. Experimental stuff.
|
||||
</description>
|
||||
|
||||
</project>
|
@ -0,0 +1,206 @@
|
||||
package com.twelvemonkeys.swing.filechooser;
|
||||
|
||||
import com.twelvemonkeys.lang.Platform;
|
||||
import com.twelvemonkeys.lang.Validate;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.filechooser.FileSystemView;
|
||||
import javax.swing.filechooser.FileView;
|
||||
import javax.swing.plaf.FileChooserUI;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* FileSystemViews
|
||||
*
|
||||
* @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a>
|
||||
* @author last modified by $Author: haraldk$
|
||||
* @version $Id: FileSystemViews.java,v 1.0 Jan 14, 2010 3:19:51 PM haraldk Exp$
|
||||
*/
|
||||
public final class FileSystemViews {
|
||||
|
||||
public static FileSystemView getFileSystemView() {
|
||||
if (Platform.os() == Platform.OperatingSystem.MacOS) {
|
||||
return ProxyFileSystemView.instance;
|
||||
}
|
||||
|
||||
return FileSystemView.getFileSystemView();
|
||||
}
|
||||
|
||||
private static class ProxyFileSystemView extends FileSystemView {
|
||||
|
||||
private static final FileSystemView instance = createFSV();
|
||||
|
||||
private static FileSystemView createFSV() {
|
||||
FileSystemView view = FileSystemView.getFileSystemView();
|
||||
|
||||
try {
|
||||
FileChooserUI ui = null;
|
||||
/* NOTE: The following is faster, but does not work reliably, as getSystemTypeDescription will return null...
|
||||
|
||||
// The below is really a lot of hassle to avoid creating a JFileChooser. Maybe not a good idea?
|
||||
String uiClassName = UIManager.getString("FileChooserUI");
|
||||
try {
|
||||
@SuppressWarnings({"unchecked"})
|
||||
Class<FileChooserUI> uiClass = (Class<FileChooserUI>) Class.forName(uiClassName);
|
||||
@SuppressWarnings({"unchecked"})
|
||||
Constructor<FileChooserUI>[] constructors = uiClass.getDeclaredConstructors();
|
||||
for (Constructor constructor : constructors) {
|
||||
if (!constructor.isAccessible()) {
|
||||
constructor.setAccessible(true);
|
||||
}
|
||||
|
||||
Class[] parameterTypes = constructor.getParameterTypes();
|
||||
|
||||
// Test the two most likely constructors
|
||||
if (parameterTypes.length == 0) {
|
||||
ui = (FileChooserUI) constructor.newInstance();
|
||||
break;
|
||||
}
|
||||
else if (parameterTypes.length == 1 && parameterTypes[0] == JFileChooser.class) {
|
||||
ui = (FileChooserUI) constructor.newInstance((JFileChooser) null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ignore) {
|
||||
ignore.printStackTrace();
|
||||
}
|
||||
|
||||
if (ui == null) {
|
||||
*/
|
||||
// Somewhat slower, but should work even if constructors change
|
||||
ui = new JFileChooser().getUI();
|
||||
// }
|
||||
|
||||
return new ProxyFileSystemView(ui.getFileView(null), view);
|
||||
}
|
||||
catch (Throwable ignore) {
|
||||
}
|
||||
|
||||
// Fall back to default view
|
||||
return view;
|
||||
}
|
||||
|
||||
private final FileView mUIView;
|
||||
private final FileSystemView mDefaultView;
|
||||
|
||||
public ProxyFileSystemView(final FileView pUIView, final FileSystemView pDefaultView) {
|
||||
Validate.notNull(pUIView, "uiView");
|
||||
Validate.notNull(pDefaultView, "defaultFileSystemView");
|
||||
|
||||
mUIView = pUIView;
|
||||
mDefaultView = pDefaultView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean isTraversable(File f) {
|
||||
return mUIView.isTraversable(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSystemDisplayName(File f) {
|
||||
return mUIView.getName(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSystemTypeDescription(File f) {
|
||||
return mUIView.getTypeDescription(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getSystemIcon(File f) {
|
||||
return mUIView.getIcon(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRoot(File f) {
|
||||
return mDefaultView.isRoot(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isParent(File folder, File file) {
|
||||
return mDefaultView.isParent(folder, file);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getChild(File parent, String fileName) {
|
||||
return mDefaultView.getChild(parent, fileName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFileSystem(File f) {
|
||||
return mDefaultView.isFileSystem(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isHiddenFile(File f) {
|
||||
return mDefaultView.isHiddenFile(f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFileSystemRoot(File dir) {
|
||||
return mDefaultView.isFileSystemRoot(dir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDrive(File dir) {
|
||||
return mDefaultView.isDrive(dir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFloppyDrive(File dir) {
|
||||
return mDefaultView.isFloppyDrive(dir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isComputerNode(File dir) {
|
||||
return mDefaultView.isComputerNode(dir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File[] getRoots() {
|
||||
return mDefaultView.getRoots();
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getHomeDirectory() {
|
||||
return mDefaultView.getHomeDirectory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getDefaultDirectory() {
|
||||
return mDefaultView.getDefaultDirectory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public File createFileObject(File dir, String filename) {
|
||||
return mDefaultView.createFileObject(dir, filename);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File createFileObject(String path) {
|
||||
return mDefaultView.createFileObject(path);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File[] getFiles(File dir, boolean useFileHiding) {
|
||||
return mDefaultView.getFiles(dir, useFileHiding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getParentDirectory(File dir) {
|
||||
return mDefaultView.getParentDirectory(dir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File createNewFolder(File containingDir) throws IOException {
|
||||
return mDefaultView.createNewFolder(containingDir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + "[" + mUIView + ", " + mDefaultView + "]";
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user