From b249080bc839e1b39601d7110b879588080d4362 Mon Sep 17 00:00:00 2001 From: Brian Patino Date: Wed, 10 Feb 2016 22:52:19 -0500 Subject: [PATCH] Add Icon to Root * add recursive finder for all files/directories (testing) * extend FolderViewManager.java * add hdd icons --- src/main/java/Controller.java | 52 +++++++++++++++++++---- src/main/java/FolderViewManager.java | 59 ++++++++++++++++----------- src/main/java/Main.java | 13 ++++-- src/main/resources/icons/hdd.png | Bin 0 -> 3357 bytes 4 files changed, 87 insertions(+), 37 deletions(-) create mode 100644 src/main/resources/icons/hdd.png diff --git a/src/main/java/Controller.java b/src/main/java/Controller.java index 543a382..cb7b918 100644 --- a/src/main/java/Controller.java +++ b/src/main/java/Controller.java @@ -1,27 +1,33 @@ package main.java; import javafx.fxml.FXML; +import javafx.scene.Node; import javafx.scene.control.MenuItem; import javafx.scene.control.TreeCell; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; -import javafx.util.Callback; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import sun.misc.Resource; +import sun.reflect.generics.tree.Tree; import java.io.File; import java.io.IOException; +import java.nio.file.FileVisitOption; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.Arrays; +import java.util.EnumSet; import java.util.ResourceBundle; public class Controller{ + private TreeItem root = new TreeItem<>(); + private final Image hddIcon = new Image("/main/resources/icons/hdd.png"); @FXML private MenuItem fileOpen; @FXML private MenuItem fileNew; @FXML private MenuItem fileTag; @FXML private MenuItem fileExit; @FXML private MenuItem editPreferences; @FXML private TreeView dirTree; - @FXML private ResourceBundle resources; @FXML private void initialize() { @@ -31,14 +37,19 @@ public class Controller{ // Create the directory Tree private void createTree() { - dirTree.setRoot(new TreeItem<>()); - dirTree.setShowRoot(false); + // Get the hard disk drives and 2 level down File[] roots = File.listRoots(); - for (File root : roots) { - TreeItem itemChild = new TreeItem<>(root); - itemChild.setExpanded(false); - dirTree.getRoot().getChildren().add(itemChild); + for (File hdd : roots) { + TreeItem parentTreeItem = new TreeItem<>(hdd); + parentTreeItem.setGraphic(new ImageView(hddIcon)); +// setChildOfParent(parentTreeItem); + parentTreeItem.getChildren().add(new TreeItem<>(new File("Users"))); // test + root.getChildren().add(parentTreeItem); // set hdd to root + } + dirTree.setRoot(root); + dirTree.setShowRoot(false); + /*dirTree.setCellFactory(new Callback, TreeCell>() { @Override public TreeCell call(TreeView param) { @@ -47,6 +58,29 @@ public TreeCell call(TreeView param) { });*/ } + private void setChildOfParent(TreeItem parent) { +// String rootPath = parent.getPath(); + try { + // Loop through all of the files/folders from parent at depth 2 + Files.walkFileTree(Paths.get(parent.getValue().getAbsolutePath()), EnumSet.of(FileVisitOption.FOLLOW_LINKS), 2, new FolderViewManager()).forEach(filePath -> { + if (Files.isRegularFile(filePath)) { + File childFile = filePath.toFile(); // create a file from working path + TreeItem itemChild = new TreeItem<>(childFile); // create a tree item from child file + parent.getChildren().add(itemChild); + itemChild.setExpanded(false); + System.out.println(filePath); + } + }); + /*Files.walk(Paths.get("C:\\Users\\Brian")).forEach(filePath -> { + if (Files.isRegularFile(filePath)) { +// System.out.println(filePath); + } + });*/ + } catch (IOException e) { + e.printStackTrace(); + } + } + private class TreeFieldImpl extends TreeCell { public TreeFieldImpl() { // MenuItem diff --git a/src/main/java/FolderViewManager.java b/src/main/java/FolderViewManager.java index 3a774d7..0cfbd51 100644 --- a/src/main/java/FolderViewManager.java +++ b/src/main/java/FolderViewManager.java @@ -5,56 +5,67 @@ import javafx.scene.control.TreeView; import java.io.File; - -/** - * Created by kristopherguzman on 2/7/16. - */ +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; /** This class handles manipulation of the Folder View. This includes directory searches, displaying directories, and all things directly changing the Folder View. - */ -public class FolderViewManager { - - public static TreeView treeView; - private static TreeItem root; - private static int NEST_COUNT = 0; //tracks number of nested calls when searching through files, TEMPORARY - private FolderViewManager() { } + Additionally, this class extends SimpleFileVisitor which uses java 8. - public static void setRootDirectory(File file) { + @author kristopherguzman + @author Brian Patino + */ +public class FolderViewManager extends SimpleFileVisitor{ +// public static TreeView treeView; +// private static TreeItem root; +// private static int NEST_COUNT = 0; //tracks number of nested calls when searching through files, TEMPORARY + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { +// System.out.printf("Visiting file %s\n", file); + return FileVisitResult.CONTINUE; + } + /** + * {@inheritDoc} + * This method must be overridden so that walking the tree can continue. + * */ + @Override + public FileVisitResult visitFileFailed(Path file, IOException e) throws IOException { + System.err.printf("Visiting failed for %s\n", file); + return FileVisitResult.SKIP_SUBTREE; + } + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { +// System.out.printf("About to visit directory %s\n", dir); + return FileVisitResult.CONTINUE; + } + /*public static void setRootDirectory(File file) { root = new TreeItem(file.getName()); createCellsFromRoot(file, root); treeView.setRoot(root); } private static void createCellsFromRoot(File rootFile, TreeItem rootNode) { - NEST_COUNT++; - if(NEST_COUNT > 6000) { //fixed value, TEMPORARY, must come up with better way to optimize load time of files - return; } for(File f : rootFile.listFiles()) { - if(!f.getName().startsWith(".")) { //don't show files that start with dot (ex: .filename .pythonfile) - TreeItem fileNode = new TreeItem(f.getName()); rootNode.getChildren().add(fileNode); - if (f.isDirectory()) { - createCellsFromRoot(f, fileNode); - } } - } - } - -} +*/} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index fb58fa5..c1cde18 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -10,6 +10,8 @@ import javafx.stage.Stage; import java.io.File; +import java.net.InetAddress; +import java.net.UnknownHostException; public class Main extends Application { @@ -26,16 +28,19 @@ public void handle(ActionEvent event) { } });*/ Parent root = FXMLLoader.load(getClass().getResource("/main/resources/StartPage.fxml")); - Rectangle2D screenBounds = Screen.getPrimary().getVisualBounds(); +// Rectangle2D screenBounds = Screen.getPrimary().getVisualBounds(); primaryStage.setTitle("Iron-gate!"); primaryStage.setScene(new Scene(root, 990, 785)); Scene scene = primaryStage.getScene(); // we get the scene from above scene.getStylesheets().clear(); // clear any styles - scene.getStylesheets().add("/main/resources/mainStyle.css"); // absolute path +// scene.getStylesheets().add("/main/resources/mainStyle.css"); // absolute path - try { //try to set the tree view in the FolderViewManager class + /** + * Temporally omitted, needs to be transfered to the Controller Class + */ + /*try { //try to set the tree view in the FolderViewManager class FolderViewManager.treeView = (TreeView) scene.lookup("#folder-view-pane"); File homeDir = new File(System.getProperty("user.home")); @@ -45,7 +50,7 @@ public void handle(ActionEvent event) { } catch (Exception e) { e.printStackTrace(); - } + }*/ primaryStage.show(); } diff --git a/src/main/resources/icons/hdd.png b/src/main/resources/icons/hdd.png new file mode 100644 index 0000000000000000000000000000000000000000..0bb911fbfccfbfcb28ce2e976dcca0030f132cfc GIT binary patch literal 3357 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 literal 0 HcmV?d00001