diff --git a/src/main/java/org/jabref/gui/groups/GroupTreeView.java b/src/main/java/org/jabref/gui/groups/GroupTreeView.java index fd3ab5c7614..987bd0b282b 100644 --- a/src/main/java/org/jabref/gui/groups/GroupTreeView.java +++ b/src/main/java/org/jabref/gui/groups/GroupTreeView.java @@ -403,7 +403,11 @@ private Optional> getTreeItemByValue(TreeItem viewModel.removeGroupNoSubgroups(group)); MenuItem editGroup = new MenuItem(Localization.lang("Edit group")); editGroup.setOnAction(event -> { @@ -439,9 +443,13 @@ private ContextMenu createContextMenuForGroup(GroupNodeViewModel group) { removeEntries.setOnAction(event -> viewModel.removeSelectedEntries(group)); menu.getItems().add(editGroup); - removeGroup.getItems().add(removeGroupKeepSubgroups); - removeGroup.getItems().add(removeGroupAndSubgroups); - menu.getItems().add(removeGroup); + if (group.getChildren().size() > 0) { + removeGroupWithSubgroups.getItems().add(removeGroupKeepSubgroups); + removeGroupWithSubgroups.getItems().add(removeGroupAndSubgroups); + menu.getItems().add(removeGroupWithSubgroups); + } else { + menu.getItems().add(removeGroupNoSubgroups); + } menu.getItems().add(new SeparatorMenuItem()); menu.getItems().add(addSubgroup); menu.getItems().add(removeSubgroups); diff --git a/src/main/java/org/jabref/gui/groups/GroupTreeViewModel.java b/src/main/java/org/jabref/gui/groups/GroupTreeViewModel.java index 8cf74178629..cb487dbd456 100644 --- a/src/main/java/org/jabref/gui/groups/GroupTreeViewModel.java +++ b/src/main/java/org/jabref/gui/groups/GroupTreeViewModel.java @@ -471,6 +471,40 @@ public void removeGroupAndSubgroups(GroupNodeViewModel group) { } } + /** + * Removes the specified group and its subgroups (after asking for confirmation). + */ + public void removeGroupNoSubgroups(GroupNodeViewModel group) { + boolean confirmed; + if (selectedGroups.size() <= 1) { + confirmed = dialogService.showConfirmationDialogAndWait( + Localization.lang("Remove group"), + Localization.lang("Remove group \"%0\"?", group.getDisplayName()), + Localization.lang("Remove")); + } else { + confirmed = dialogService.showConfirmationDialogAndWait( + Localization.lang("Remove groups and subgroups"), + Localization.lang("Remove all selected groups and their subgroups?"), + Localization.lang("Remove all")); + } + + if (confirmed) { + // TODO: Add undo + // final UndoableAddOrRemoveGroup undo = new UndoableAddOrRemoveGroup(groupsRoot, node, UndoableAddOrRemoveGroup.REMOVE_NODE_WITHOUT_CHILDREN); + // panel.getUndoManager().addEdit(undo); + + removeGroupsAndSubGroupsFromEntries(group); + group.getGroupNode().removeFromParent(); + + if (selectedGroups.size() > 1) { + dialogService.notify(Localization.lang("Removed all selected groups and their subgroups.")); + } else { + dialogService.notify(Localization.lang("Removed group \"%0\" and its subgroups.", group.getDisplayName())); + } + writeGroupChangesToMetaData(); + } + } + void removeGroupsAndSubGroupsFromEntries(GroupNodeViewModel group) { for (GroupNodeViewModel child : group.getChildren()) { removeGroupsAndSubGroupsFromEntries(child);