private void dragDroppedEvent(Object value, TreeItem<N> treeItem, DragEvent event, Node node) { if (value instanceof Folder && value != dragAndDropMove.getSource()) { Folder folder = (Folder) node; int count = 0; success = false; treeItemChildrenSize(treeItem, count); accepTransferDrag(folder, success); event.setDropCompleted(success); refreshTreeItem(dragAndDropMove.getSourceTreeItem().getParent()); refreshTreeItem(treeItem); tree.getSelectionModel().clearSelection(); event.consume(); } }
private ContextMenu createFolderContextMenu(TreeItem<N> selectedTreeItem) { ContextMenu contextMenu = new ContextMenu(); List<MenuItem> items = new ArrayList<>(); items.add(createRenameProjectMenuItem()); items.add(createCreateFolderMenuItem()); items.add(createDeleteNodeMenuItem(Collections.singletonList(selectedTreeItem))); contextMenu.getItems().addAll(items.stream() .sorted(Comparator.comparing(MenuItem::getText)) .collect(Collectors.toList())); return contextMenu; }
private ContextMenu createProjectContextMenu(TreeItem<N> selectedTreeItem) { ContextMenu contextMenu = new ContextMenu(); List<MenuItem> items = new ArrayList<>(); items.add(createDeleteNodeMenuItem(Collections.singletonList(selectedTreeItem))); items.add(createRenameProjectMenuItem()); contextMenu.getItems().addAll(items.stream() .sorted(Comparator.comparing(MenuItem::getText)) .collect(Collectors.toList())); return contextMenu; }
treeModel.showCreateFolderDialog(window, selectedFolder.get()).ifPresent(newFolder -> { TreeItem<N> selectedItem = tree.getSelectionModel().getSelectedItem(); refresh(selectedItem); }) ); deleteNodeButton.disableProperty().bind(selectedNode.isNull().or(deleteMenuItemDisableProperty)); ObservableList<TreeItem<N>> selectedItems = tree.getSelectionModel().getSelectedItems(); deleteNodeButton.setOnAction(event -> createDeleteAlert(selectedItems)); setHgap(5); setVgap(5); ColumnConstraints column0 = new ColumnConstraints(); column0.setHgrow(Priority.ALWAYS); getColumnConstraints().addAll(column0); RowConstraints row0 = new RowConstraints(); RowConstraints row1 = new RowConstraints(); row1.setVgrow(Priority.ALWAYS); getRowConstraints().addAll(row0, row1); add(new ScrollPane(path), 0, 0); add(new HBox(5, createFolderButton, deleteNodeButton), 1, 0); add(scrollPane, 0, 1, 2, 1); context.getExecutor().submit(() -> { try { List<TreeItem<N>> nodes = new ArrayList<>(); for (D rootFolder : treeModel.getRootFolders()) { TreeItem<N> node = createCollapsedFolderItem(rootFolder); node.setExpanded(true); nodes.add(node);
private void treeViewChangeListener(ListChangeListener.Change<? extends TreeItem<N>> c) { if (c.getList().isEmpty()) { tree.setContextMenu(null); } else if (c.getList().size() == 1) { TreeItem<N> selectedTreeItem = c.getList().get(0); N value = selectedTreeItem.getValue(); if (value instanceof Project) { tree.setContextMenu(createProjectContextMenu(selectedTreeItem)); tree.setOnKeyPressed((KeyEvent ke) -> { if (ke.getCode() == KeyCode.F2) { renameNode(selectedTreeItem); } }); } else if (value instanceof Folder) { tree.setContextMenu(createFolderContextMenu(selectedTreeItem)); } else { tree.setContextMenu(null); } N node = selectedTreeItem.getValue(); String nodeId = (node instanceof Project) ? ((Project) node).getId() : null; deleteMenuItemDisableProperty.setValue(openedProjects.contains(nodeId)); } else { multipleSelectionChangeListener(c); } }
dialog.setTitle(RESOURCE_BUNDLE.getString("OpenFile")); dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); NodeChooser<N, F, D, T> nodeChooser = new NodeChooser<>(window, treeModel, appData, context, filter, openedProjectsList); Button button = (Button) dialog.getDialogPane().lookupButton(ButtonType.OK); button.disableProperty().bind(nodeChooser.selectedNodeProperty().isNull()); nodeChooser.doubleClick().addListener((observable, oldValue, newValue) -> { if (Boolean.TRUE.equals(newValue)) { button.fire(); dialog.setResultConverter(buttonType -> { if (buttonType == ButtonType.OK) { return nodeChooser.selectedNodeProperty().get(); dialog.initOwner(window); Optional<T> node = dialog.showAndWait(); nodeChooser.savePreferences(); return node; } finally {
private MenuItem createDeleteNodeMenuItem(List<? extends TreeItem<N>> selectedTreeItems) { MenuItem deleteMenuItem = new MenuItem(RESOURCE_BUNDLE.getString("Delete"), Glyph.createAwesomeFont('\uf1f8').size(ICON_SIZE)); if (selectedTreeItems.size() == 1) { TreeItem<N> selectedTreeItem = selectedTreeItems.get(0); N selectedTreeItemValue = selectedTreeItem.getValue(); if (selectedTreeItemValue instanceof Folder) { Folder folder = (Folder) selectedTreeItemValue; if (!folder.getChildren().isEmpty()) { deleteMenuItem.setDisable(true); } } else if (selectedTreeItemValue instanceof Project) { Project project = (Project) selectedTreeItemValue; if (openedProjects.contains(project.getId())) { deleteMenuItem.setDisable(true); } } } else { selectionContainsOpenedProjects(selectedTreeItems, deleteMenuItem); } deleteMenuItem.setOnAction(event -> createDeleteAlert(selectedTreeItems)); deleteMenuItem.setAccelerator(new KeyCodeCombination(KeyCode.DELETE)); return deleteMenuItem; }
private ContextMenu createMultipleContextMenu(List<? extends TreeItem<N>> selectedTreeItems) { ContextMenu contextMenu = new ContextMenu(); contextMenu.getItems().add(createDeleteNodeMenuItem(selectedTreeItems)); return contextMenu; }
private void multipleSelectionChangeListener(ListChangeListener.Change<? extends TreeItem<N>> c) { for (TreeItem<N> selectedItem : c.getList()) { if (selectedItem.getValue() instanceof Project) { String id = ((Project) selectedItem.getValue()).getId(); boolean atleastOneOpened = openedProjects.stream().anyMatch(projectId -> projectId.equals(id)); deleteMenuItemDisableProperty.setValue(atleastOneOpened); if (atleastOneOpened) { break; } } } tree.setContextMenu(createMultipleContextMenu(c.getList())); }
private void refresh(TreeItem<N> item) { N node = item.getValue(); if (treeModel.isFolder(node)) { try { List<TreeItem<N>> childItems = new ArrayList<>(); for (N child : treeModel.getChildren((D) node)) { if (treeModel.isFolder(child)) { childItems.add(createCollapsedFolderItem((D) child)); } else { F file = (F) child; if (filter.test(file, treeModel)) { childItems.add(new TreeItem<>(child)); } } } Platform.runLater(() -> item.getChildren().setAll(childItems)); } catch (Throwable t) { LOGGER.error(t.toString(), t); } } }