/* * */ package treeview; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; import application.tools.InfoTool; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.image.ImageView; import javafx.scene.input.ClipboardContent; import javafx.scene.input.Dragboard; import javafx.scene.input.MouseButton; import javafx.scene.input.TransferMode; import javafx.scene.layout.BorderPane; /** * The Class TreeViewManager. * * @author GOXR3PLUS * */ public class TreeViewManager extends BorderPane { @FXML private TreeView<String> systemTreeView; // ------------------------------------- /** * The root element of the computer hard drive - drives */ SystemRoot systemRoot = new SystemRoot(); /** The libraries tree. */ public TreeItem<String> librariesTree = new TreeItem<>("Libraries", InfoTool.getImageViewFromResourcesFolder("folder.png")); /** The tree context menu. */ // public TreeViewContextMenu treeContextMenu = new TreeViewContextMenu() /** The host name. */ String hostName = "computer"; /** * Constructor. */ public TreeViewManager() { // FXMLLoader FXMLLoader loader = new FXMLLoader(getClass().getResource(InfoTool.FXMLS + "TreeViewManager.fxml")); loader.setController(this); loader.setRoot(this); try { loader.load(); } catch (IOException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, "TreeViewManager FXML can't be loaded!", ex); } } /** Called as soon as the .fxml has been loaded */ @FXML private void initialize() { // ------------------------- TreeView ---------------------------------- systemTreeView.setRoot(systemRoot.getRoot()); systemTreeView.setOnMouseReleased(m -> { TreeItemFile source = (TreeItemFile) systemTreeView.getSelectionModel().getSelectedItem(); // System.out.println(source.getValue()) // host is not on the game if (source == null || source.getValue().equals(hostName)) { m.consume(); return; } if (m.getButton() == MouseButton.PRIMARY && m.getClickCount() == 1) { System.out.println(source.getValue()); // System.out.println(source.isExpanded()) // source is expanded if (!source.isExpanded() && source.getChildren().isEmpty()) { if (source.isDirectory()) source.setGraphic(new ImageView(SystemRoot.openedFolderImage)); try { if (source.getChildren().isEmpty()) { Path mainPath = Paths.get(source.getFullPath()); // directory? if (mainPath.toFile().isDirectory()) Files.newDirectoryStream(mainPath).forEach(path -> { // !hidden if (!path.toFile().isHidden()) // directory or accepted file if (path.toFile().isDirectory() || InfoTool.isAudioSupported(path.toFile().getAbsolutePath())) { TreeItemFile treeNode = new TreeItemFile(path.toString()); source.getChildren().add(treeNode); } }); } else { // if you want to implement rescanning a // directory // for // changes this would be the place to do it } } catch (IOException x) { x.printStackTrace(); } source.setExpanded(true); } // if (!source.isExpanded() && source.isDirectory()) // source.setGraphic(new ImageView(SystemRoot.folderImage)) } else if (m.getButton() == MouseButton.SECONDARY) { // Main.treeManager.treeContextMenu.showMenu(Genre.SYSTEMFILE, // source.getFullPath(), // m.getScreenX(), m.getScreenY()); } }); // Drag Implementation systemTreeView.setOnDragDetected(event -> { TreeItemFile source = (TreeItemFile) systemTreeView.getSelectionModel().getSelectedItem(); //The host is not allowed if (source != null && !source.getValue().equals(hostName)) { // Allow this transfer Mode Dragboard board = startDragAndDrop(TransferMode.LINK); // Put a String on DragBoard ClipboardContent content = new ClipboardContent(); content.putFiles(Arrays.asList(new File(source.getFullPath()))); board.setContent(content); event.consume(); } }); // ---------------------------LibraryTreeView-------------------------------------- // TreeView<String> libraryTreeView = new TreeView<>(librariesTree); // libraryTreeView.setEditable(true); // // // Mouse Clicked Implementation // libraryTreeView.setOnMouseClicked(m -> { // TreeItem<String> selected = // libraryTreeView.getSelectionModel().getSelectedItem(); // // if (!selected.getValue().equals(librariesTree.getValue())) { // // if (m.getButton() == MouseButton.SECONDARY) { // // treeContextMenu.showMenu(Genre.LIBRARY, selected.getValue(), // // m.getScreenX(), m.getSceneY()); // // } // } // }); // // // Drag Implementation // libraryTreeView.setOnDragDetected(event -> { // TreeItem<String> source = // libraryTreeView.getSelectionModel().getSelectedItem(); // // if (!source.getValue().equals(librariesTree.getValue())) { // // // Allow this transfer Mode // Dragboard board = startDragAndDrop(TransferMode.LINK); // // // Put a String on DragBoard // ClipboardContent content = new ClipboardContent(); // content.putString("!PATTERN LIBRARY!" + source.getValue()); // // board.setContent(content); // event.consume(); // } // }); } }