diff options
Diffstat (limited to 'src/de/fhswf/fbin/java2fx/trees')
| -rw-r--r-- | src/de/fhswf/fbin/java2fx/trees/DirectoryTreeItem.java | 103 | ||||
| -rw-r--r-- | src/de/fhswf/fbin/java2fx/trees/DirectoryTreeView.java | 20 |
2 files changed, 123 insertions, 0 deletions
diff --git a/src/de/fhswf/fbin/java2fx/trees/DirectoryTreeItem.java b/src/de/fhswf/fbin/java2fx/trees/DirectoryTreeItem.java new file mode 100644 index 0000000..29afa29 --- /dev/null +++ b/src/de/fhswf/fbin/java2fx/trees/DirectoryTreeItem.java @@ -0,0 +1,103 @@ +package de.fhswf.fbin.java2fx.trees; + +import java.io.File; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.control.TreeItem; +import de.fhswf.fbin.java2fx.entities.FXFile; +import de.fhswf.fbin.java2fx.util.FileUtils; + +public class DirectoryTreeItem extends TreeItem<FXFile> +{ + private boolean isFirstTimeChildren = true; + + private boolean isFirstTimeLeaf = true; + + private boolean isLeaf; + + private File[] subDirectories; + + private static String separator = System.getProperty("file.separator"); + + private static boolean isRunningOnWindows = System.getProperty("os.name") + .toLowerCase().contains("windows"); + + public DirectoryTreeItem(File file) + { + super(new FXFile(file)); + + if (file == null) +// || (!separator.equals(file.getName()) && !file.isDirectory())) + throw new IllegalArgumentException("file is null or not a directory"); + } + + @Override + public boolean isLeaf() + { + if (isFirstTimeLeaf) + { + isFirstTimeLeaf = false; + isLeaf = getSubDirectories().length == 0; + } + + return isLeaf; + } + + @Override + public ObservableList<TreeItem<FXFile>> getChildren() + { + if (isFirstTimeChildren) + { + isFirstTimeChildren = false; + + // First getChildren() call, so we actually go off and + // determine the children of the File contained in this TreeItem. + super.getChildren().setAll(buildChildren()); + } + + return super.getChildren(); + } + + private File[] getSubDirectories() + { + if (subDirectories == null) + { + FXFile dir = (FXFile) getValue(); + System.out.println("\"" + dir.getName() + "\""); + + if (isRunningOnWindows && parentProperty().getValue() == null) + { + dir.setName(separator); + subDirectories = File.listRoots(); + System.out.println("windows detected"); + } + else + { + subDirectories = dir.getFile().listFiles(f -> FileUtils.isPublicDirectory(f)); + } + + if (subDirectories == null) + { + System.out.println("oops, something went wrong for " + + dir.getName()); + subDirectories = new File[0]; + } + } + + return subDirectories; + } + + private ObservableList<TreeItem<FXFile>> buildChildren() + { + ObservableList<TreeItem<FXFile>> children = FXCollections + .observableArrayList(); + + for (File subDirectory : getSubDirectories()) + { + children.add(new DirectoryTreeItem(subDirectory)); + } + + return children; + } +} diff --git a/src/de/fhswf/fbin/java2fx/trees/DirectoryTreeView.java b/src/de/fhswf/fbin/java2fx/trees/DirectoryTreeView.java new file mode 100644 index 0000000..6885ff6 --- /dev/null +++ b/src/de/fhswf/fbin/java2fx/trees/DirectoryTreeView.java @@ -0,0 +1,20 @@ +package de.fhswf.fbin.java2fx.trees; + +import java.io.File; + +import javafx.scene.control.TreeView; +import de.fhswf.fbin.java2fx.entities.FXFile; + +public class DirectoryTreeView extends TreeView<FXFile> +{ + public DirectoryTreeView() + { + super(new DirectoryTreeItem(new File(System.getProperty("file.separator")))); + boolean isRunningOnWindows = System.getProperty("os.name") + .toLowerCase().contains("windows"); + if (isRunningOnWindows) { + this.setShowRoot(false); + this.rootProperty().getValue().setExpanded(true);; + } + } +} |
