diff --git a/src/main/java/Controller.java b/src/main/java/Controller.java
index f8b6505..f9da16a 100644
--- a/src/main/java/Controller.java
+++ b/src/main/java/Controller.java
@@ -30,10 +30,10 @@ public class Controller{
@FXML private void initialize() {
FolderViewManager manager = new FolderViewManager(dirTree); // 2 statements in 1 line is best
-// IronFile[] hardDrives = IronFile.listRoots(); // an array of hard drives
-// manager.setRootDirectory(hardDrives);
- IronFile homeDir = new IronFile(System.getProperty("user.home")); // use this for specific directory
- manager.setRootDirectory(homeDir);
+ IronFile[] hardDrives = IronFile.listRoots(); // an array of hard drives
+ manager.setRootDirectory(hardDrives);
+// IronFile homeDir = new IronFile(System.getProperty("user.home")); // use this for specific directory
+// manager.setRootDirectory(homeDir);
}
}
diff --git a/src/main/java/FileTreeItem.java b/src/main/java/FileTreeItem.java
new file mode 100644
index 0000000..4b9eaa5
--- /dev/null
+++ b/src/main/java/FileTreeItem.java
@@ -0,0 +1,54 @@
+package main.java;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.TreeItem;
+
+/**
+ * This class extends TreeItem and generates child files dynamically for the file browser.
+ *
+ * @author Brian Patino patinobrian@gmail.com
+ * @see Tree Item
+ */
+public class FileTreeItem extends TreeItem {
+ private boolean isLeaf;
+ private boolean isFirstTimeChildren = true;
+ private boolean isFirstTimeLeaf = true;
+
+ public FileTreeItem(IronFile rootFile) {
+ super(rootFile);
+ }
+
+ @Override
+ public ObservableList> getChildren() {
+ if (isFirstTimeChildren) {
+ isFirstTimeChildren = false;
+ super.getChildren().setAll(buildChildren(this));
+ }
+ return super.getChildren();
+ }
+
+ @Override
+ public boolean isLeaf() {
+ if (isFirstTimeLeaf) {
+ isFirstTimeLeaf = false;
+ IronFile f = getValue();
+ isLeaf = f.isFile();
+ }
+ return isLeaf;
+ }
+ private ObservableList buildChildren(TreeItem ironTreeItem) {
+ IronFile f = ironTreeItem.getValue();
+ if (f != null && f.isDirectory()) {
+ IronFile[] files = f.listFiles();
+ if (files != null) {
+ ObservableList children = FXCollections.observableArrayList();
+ for (IronFile childFile : files) {
+ children.add(new FileTreeItem(childFile));
+ }
+ return children;
+ }
+ }
+ return FXCollections.emptyObservableList();
+ }
+}
diff --git a/src/main/java/FolderViewManager.java b/src/main/java/FolderViewManager.java
index a8c43c9..962308c 100644
--- a/src/main/java/FolderViewManager.java
+++ b/src/main/java/FolderViewManager.java
@@ -1,18 +1,9 @@
package main.java;
-import javafx.scene.Scene;
-import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.*;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.EnumSet;
-import java.util.concurrent.ExecutionException;
-
/**
This class handles manipulation of the Folder View. This includes
directory searches, displaying directories, and all things directly changing
@@ -21,81 +12,40 @@
Additionally, this class extends SimpleFileVisitor which uses java 8.
@author kristopherguzman
- @author Brian Patino
+ @author Brian Patino patinobrian@gmail.com
*/
public class FolderViewManager {
private final Image hddIcon = new Image("/main/resources/icons/hdd.png");
- private int NEST_COUNT = 0; //tracks number of nested calls when searching through files, TEMPORARY
- private IronFileVisitor ironVisitor;
+// private IronFileVisitor ironVisitor; // might be used later
private TreeView view;
public FolderViewManager(TreeView dirTree) {
- ironVisitor = new IronFileVisitor();
- ironVisitor.setRoot(new TreeItem<>());
+ /*ironVisitor = new IronFileVisitor(); // save this for later
+ ironVisitor.setRoot(new TreeItem<>());*/ // save this for later
view = dirTree;
}
/**
- * Original method to set a specified directory as root.
- * */
+ * Sets the root directory of the file browser to the specified folder.
+ *
+ * @param file root folder/file to start browser view
+ **/
public void setRootDirectory(IronFile file) {
- ironVisitor.setRoot(new TreeItem<>(file));
-// createCellsFromRoot(file, root);
- createTree(new TreeItem<>(file));
+ FileTreeItem rootItem = new FileTreeItem(file);
+ view.setRoot(rootItem);
}
/**
- * Overloaded method to set multiple hard drives as root.
+ * Overloaded method that sets a collection of folders/files as file browser view.
+ *
+ * @param hardDrives a collection of hard drives to being from root
* */
public void setRootDirectory(IronFile[] hardDrives) {
- for (IronFile hdd : hardDrives) { // loop through all hard drives
- TreeItem hddTreeItem = new TreeItem<>(hdd);
- hddTreeItem.setGraphic(new ImageView(hddIcon));
- createTree(hddTreeItem);
-// createCellsFromRoot(hdd, parentTreeItem);
-// ironVisitor.getRoot().getChildren().add(parentTreeItem); // set hdd to root
+ view.setRoot(new FileTreeItem(new IronFile(""))); // needs a blank file as root
+ for (IronFile hdd : hardDrives) {
+ FileTreeItem diskTreeItem = new FileTreeItem(hdd);
+ diskTreeItem.setGraphic(new ImageView(hddIcon));
+ view.getRoot().getChildren().add(diskTreeItem);
}
+ view.setShowRoot(false); // hide the blank file
}
-
- private void createCellsFromRoot(File rootFile, TreeItem rootNode) {
- NEST_COUNT++;
- if(NEST_COUNT <= 6000) { //fixed value, TEMPORARY optimization
- for(IronFile file : IronFile.convertFiles(rootFile.listFiles())) {
- if(!file.getName().startsWith(".") && !file.getName().startsWith("$")) { //don't show system files that start with dot (ex: .filename .pythonfile)
- TreeItem fileNode = new TreeItem<>(file);
- rootNode.getChildren().add(fileNode);
- if (file.isDirectory()) {
- createCellsFromRoot(file, fileNode);
- }
- }
- }
- }
- }
-
- private void createTree(TreeItem rootItem) {
- Path pathDir = Paths.get(rootItem.getValue().getAbsolutePath()); // get the path of the TreeItem
- try {
- Files.walkFileTree(pathDir, EnumSet.of(FileVisitOption.FOLLOW_LINKS), 2, ironVisitor);
- } catch (IOException e) {
- e.printStackTrace();
- }
- view.setRoot(ironVisitor.getRoot()); // set multiple hard drives as root
- view.setShowRoot(false); // do not show blank
- }
- /**
- * Set the child of a given parent TreeItem
- *
- * @param parent file of the parent node
- * @param parentTreeItem TreeItem of the parent node
- * */
- /*@SuppressWarnings("ConstantConditions")
- private void setChildOfParent(final File parent, TreeItem parentTreeItem) {
- for (final IronFile file : IronFile.convertFiles(parent.listFiles())) {
- if (file.isDirectory()) {
- System.out.println("This is a directory");
- } else {
- parentTreeItem.getChildren().add(new TreeItem<>(file));
- System.out.println(file.getName());
- }
- }
- }*/
}