diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/GroupTree.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/GroupTree.java index 212a7adc24..e371644944 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/GroupTree.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/GroupTree.java @@ -72,16 +72,19 @@ final public class GroupTree extends NavPanel> { groupTree.setCellFactory(treeView -> new GroupTreeCell(getSortByBox().getSelectionModel().selectedItemProperty())); groupTree.setShowRoot(false); + getGroupManager().getAnalyzedGroups().addListener((ListChangeListener.Change change) -> { while (change.next()) { change.getAddedSubList().stream().forEach(this::insertGroup); change.getRemoved().stream().forEach(this::removeFromTree); } + sortGroups(); }); for (DrawableGroup g : getGroupManager().getAnalyzedGroups()) { insertGroup(g); } + sortGroups(); } /** diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/GroupTreeItem.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/GroupTreeItem.java index 2df2499518..0a18668247 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/GroupTreeItem.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/GroupTreeItem.java @@ -105,6 +105,7 @@ class GroupTreeItem extends TreeItem { Platform.runLater(() -> { getChildren().add(newTreeItem); + getChildren().sort(Comparator.comparing(treeItem -> treeItem.getValue().getGroup(), Comparator.nullsLast(comp))); }); return newTreeItem; }); @@ -122,7 +123,7 @@ class GroupTreeItem extends TreeItem { final GroupTreeItem newTreeItem = new GroupTreeItem(t, g, true); Platform.runLater(() -> { getChildren().add(newTreeItem); - getChildren().sort(Comparator.comparing(treeItem -> treeItem.getValue().getGroup(), comp)); + getChildren().sort(Comparator.comparing(treeItem -> treeItem.getValue().getGroup(), Comparator.nullsLast(comp))); }); return newTreeItem; }); @@ -171,7 +172,7 @@ class GroupTreeItem extends TreeItem { @ThreadConfined(type = ThreadConfined.ThreadType.JFX) synchronized void resortChildren(Comparator newComp) { this.comp = newComp; - getChildren().sort(Comparator.comparing(treeItem -> treeItem.getValue().getGroup(), comp)); + getChildren().sort(Comparator.comparing(treeItem -> treeItem.getValue().getGroup(), Comparator.nullsLast(comp))); for (GroupTreeItem ti : childMap.values()) { ti.resortChildren(comp); } diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/HashHitGroupList.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/HashHitGroupList.java index 1431e46cf7..71f8aa026f 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/HashHitGroupList.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/HashHitGroupList.java @@ -75,12 +75,11 @@ final public class HashHitGroupList extends NavPanel { setGraphic(new ImageView("org/sleuthkit/autopsy/imagegallery/images/hashset_hits.png")); getBorderPane().setCenter(groupList); - sorted = getController().getGroupManager().getAnalyzedGroups().filtered((DrawableGroup t) -> t.getHashSetHitsCount() > 0).sorted(); + sorted = getController().getGroupManager().getAnalyzedGroups().filtered((DrawableGroup t) -> t.getHashSetHitsCount() > 0).sorted(getDefaultComparator()); groupList.setCellFactory(treeView -> new GroupListCell(getSortByBox().getSelectionModel().selectedItemProperty())); groupList.setItems(sorted); - } @ThreadConfined(type = ThreadConfined.ThreadType.JFX) diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/NavPanel.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/NavPanel.java index 404bd7c704..aa5ed36773 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/NavPanel.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/navpanel/NavPanel.java @@ -90,7 +90,6 @@ abstract class NavPanel extends Tab { } else { categoryManager.unregisterListener(NavPanel.this); } - }); //keep selection in sync with controller