Skip to content

Commit

Permalink
Add sorting of all groups and subgroups, recursively
Browse files Browse the repository at this point in the history
For #2599
  • Loading branch information
Siedlerchr committed Mar 18, 2017
1 parent 63620ff commit 86deb7e
Show file tree
Hide file tree
Showing 21 changed files with 92 additions and 9 deletions.
29 changes: 22 additions & 7 deletions src/main/java/org/jabref/gui/groups/GroupTreeController.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,21 @@ public class GroupTreeController extends AbstractController<GroupTreeViewModel>

private static final Log LOGGER = LogFactory.getLog(GroupTreeController.class);

@FXML private TreeTableView<GroupNodeViewModel> groupTree;
@FXML private TreeTableColumn<GroupNodeViewModel, GroupNodeViewModel> mainColumn;
@FXML private TreeTableColumn<GroupNodeViewModel, GroupNodeViewModel> numberColumn;
@FXML private TreeTableColumn<GroupNodeViewModel, GroupNodeViewModel> disclosureNodeColumn;
@FXML private CustomTextField searchField;
@FXML
private TreeTableView<GroupNodeViewModel> groupTree;
@FXML
private TreeTableColumn<GroupNodeViewModel, GroupNodeViewModel> mainColumn;
@FXML
private TreeTableColumn<GroupNodeViewModel, GroupNodeViewModel> numberColumn;
@FXML
private TreeTableColumn<GroupNodeViewModel, GroupNodeViewModel> disclosureNodeColumn;
@FXML
private CustomTextField searchField;

@Inject private StateManager stateManager;
@Inject private DialogService dialogService;
@Inject
private StateManager stateManager;
@Inject
private DialogService dialogService;

@FXML
public void initialize() {
Expand Down Expand Up @@ -222,8 +229,16 @@ private ContextMenu createContextMenuForGroup(GroupNodeViewModel group) {
MenuItem removeGroupAndSubgroups = new MenuItem(Localization.lang("Remove group and subgroups"));
removeGroupAndSubgroups.setOnAction(event -> viewModel.removeGroupAndSubgroups(group));

MenuItem sortAlphabetically = new MenuItem(Localization.lang("Sort alphabetically"));
sortAlphabetically.setOnAction(event -> viewModel.sortAlphabetically(group));

MenuItem sortSubGroups = new MenuItem(Localization.lang("Sort subgroups alphabetically"));
sortSubGroups.setOnAction(event -> viewModel.sortSubGroupAlphabetically(group));

menu.getItems().add(addSubgroup);
menu.getItems().add(removeGroupAndSubgroups);
menu.getItems().add(sortAlphabetically);
menu.getItems().add(sortSubGroups);
return menu;
}

Expand Down
19 changes: 17 additions & 2 deletions src/main/java/org/jabref/gui/groups/GroupTreeViewModel.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.jabref.gui.groups;

import java.util.Comparator;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Predicate;
Expand Down Expand Up @@ -27,18 +28,24 @@ public class GroupTreeViewModel extends AbstractViewModel {
private final DialogService dialogService;
private final ObjectProperty<Predicate<GroupNodeViewModel>> filterPredicate = new SimpleObjectProperty<>();
private final StringProperty filterText = new SimpleStringProperty();
private final Comparator<GroupTreeNode> compAlphabetIgnoreCase = (GroupTreeNode v1, GroupTreeNode v2) -> v1
.getName()
.compareToIgnoreCase(v2.getName());

private Optional<BibDatabaseContext> currentDatabase;

public GroupTreeViewModel(StateManager stateManager, DialogService dialogService) {
this.stateManager = Objects.requireNonNull(stateManager);
this.dialogService = Objects.requireNonNull(dialogService);

// Register listener
stateManager.activeDatabaseProperty().addListener((observable, oldValue, newValue) -> onActiveDatabaseChanged(newValue));
stateManager.activeDatabaseProperty()
.addListener((observable, oldValue, newValue) -> onActiveDatabaseChanged(newValue));
selectedGroup.addListener((observable, oldValue, newValue) -> onSelectedGroupChanged(newValue));

// Set-up bindings
filterPredicate.bind(Bindings.createObjectBinding(() -> group -> group.isMatchedBy(filterText.get()), filterText));
filterPredicate
.bind(Bindings.createObjectBinding(() -> group -> group.isMatchedBy(filterText.get()), filterText));

// Init
onActiveDatabaseChanged(stateManager.activeDatabaseProperty().getValue());
Expand Down Expand Up @@ -144,4 +151,12 @@ public void removeGroupAndSubgroups(GroupNodeViewModel group) {
dialogService.notify(Localization.lang("Removed group \"%0\" and its subgroups.", group.getDisplayName()));
}
}

public void sortAlphabetically(GroupNodeViewModel group) {
group.getGroupNode().getRoot().sortChildren(compAlphabetIgnoreCase, true);
}

public void sortSubGroupAlphabetically(GroupNodeViewModel group) {
group.getGroupNode().sortChildren(compAlphabetIgnoreCase, true);
}
}
1 change: 1 addition & 0 deletions src/main/java/org/jabref/gui/groups/GroupsTree.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public GroupsTree(GroupSelector groupSelector) {
getSelectionModel().setSelectionMode(
TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
this.setFocusable(true);

}

/** Returns the first selected node, or null if nothing is selected. */
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/org/jabref/model/groups/AbstractGroup.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,24 @@ public String toString() {
'}';
}

@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if ((other == null) || (getClass() != other.getClass())) {
return false;
}
AbstractGroup that = (AbstractGroup) other;
return Objects.equals(this.name, that.name) && Objects.equals(this.description, that.description)
&& Objects.equals(this.context, that.context);
}

@Override
public int hashCode() {
return Objects.hash(name, description, context);
}

public Optional<Color> getColor() {
return color;
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_da.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=Standard_Tabellenschriftgröße
Escape_underscores=Unterstriche_maskieren
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=Default_table_font_size
Escape_underscores=Escape_underscores
Color=Color
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.

Sort_subgroups_alphabetically=Sort_subgroups_alphabetically
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_es.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_fa.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_fr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=Taille_par_défaut_des_police_du_tableau
Escape_underscores=Echapper_les_soulignements
Color=Couleur
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=S'il_vous_plaît,_Ajouter_si_possible_toutes_les_étapes_permettant_de_reproduire_cette_anomalie.

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_in.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_it.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_ja.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_nl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_no.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_pt_BR.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_ru.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_sv.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=Maskera_understreck
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_tr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_vi.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=
2 changes: 2 additions & 0 deletions src/main/resources/l10n/JabRef_zh.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2368,3 +2368,5 @@ Default_table_font_size=
Escape_underscores=
Color=
Please_also_add_all_steps_to_reproduce_this_issue,_if_possible.=

Sort_subgroups_alphabetically=

0 comments on commit 86deb7e

Please sign in to comment.