From 7e66a61294e43780a806b8df5947a636f347522c Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Tue, 4 Mar 2025 12:34:17 +0100 Subject: [PATCH] add choicebox to filter for single vaults --- .../ui/eventview/EventViewController.java | 66 ++++++++++++++++++- src/main/resources/fxml/eventview.fxml | 12 ++-- src/main/resources/i18n/strings.properties | 1 + 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/eventview/EventViewController.java b/src/main/java/org/cryptomator/ui/eventview/EventViewController.java index 9e53a5ec2..d33fcda4e 100644 --- a/src/main/java/org/cryptomator/ui/eventview/EventViewController.java +++ b/src/main/java/org/cryptomator/ui/eventview/EventViewController.java @@ -1,36 +1,74 @@ package org.cryptomator.ui.eventview; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.event.VaultEvent; import org.cryptomator.ui.common.FxController; import javax.inject.Inject; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; +import javafx.collections.transformation.FilteredList; import javafx.collections.transformation.SortedList; import javafx.fxml.FXML; +import javafx.scene.control.ChoiceBox; import javafx.scene.control.ListView; +import javafx.util.StringConverter; import java.util.Comparator; +import java.util.ResourceBundle; @EventViewScoped public class EventViewController implements FxController { - private final SortedList reversedEventList; private final ObservableList eventList; + private final FilteredList filteredEventList; + private final ObservableList vaults; + private final SortedList reversedEventList; + private final ObservableList choiceBoxEntries; + private final ResourceBundle resourceBundle; private final EventListCellFactory cellFactory; + @FXML + ChoiceBox vaultFilterChoiceBox; @FXML ListView eventListView; @Inject - public EventViewController(ObservableList eventList, EventListCellFactory cellFactory) { - reversedEventList = new SortedList<>(eventList, Comparator.reverseOrder()); + public EventViewController(ObservableList eventList, ObservableList vaults, ResourceBundle resourceBundle, EventListCellFactory cellFactory) { this.eventList = eventList; + this.filteredEventList = eventList.filtered(_ -> true); + this.vaults = vaults; + this.reversedEventList = new SortedList<>(filteredEventList, Comparator.reverseOrder()); + this.choiceBoxEntries = FXCollections.observableArrayList(); + this.resourceBundle = resourceBundle; this.cellFactory = cellFactory; } @FXML public void initialize() { + choiceBoxEntries.add(null); + choiceBoxEntries.addAll(vaults); + vaults.addListener((ListChangeListener) c -> { + while (c.next()) { + choiceBoxEntries.removeAll(c.getRemoved()); + choiceBoxEntries.addAll(c.getAddedSubList()); + } + }); eventListView.setCellFactory(cellFactory); eventListView.setItems(reversedEventList); + + vaultFilterChoiceBox.setItems(choiceBoxEntries); + vaultFilterChoiceBox.valueProperty().addListener(this::applyVaultFilter); + vaultFilterChoiceBox.setConverter(new VaultConverter(resourceBundle)); + } + + private void applyVaultFilter(ObservableValue v, Vault oldV, Vault newV) { + if (newV == null) { + filteredEventList.setPredicate(_ -> true); + } else { + filteredEventList.setPredicate(e -> e.v().equals(newV)); + } } @FXML @@ -38,5 +76,27 @@ public class EventViewController implements FxController { eventList.clear(); } + private static class VaultConverter extends StringConverter { + + private final ResourceBundle resourceBundle; + + VaultConverter(ResourceBundle resourceBundle) { + this.resourceBundle = resourceBundle; + } + + @Override + public String toString(Vault v) { + if (v == null) { + return resourceBundle.getString("eventView.filter.allVaults"); + } else { + return v.getDisplayName(); + } + } + + @Override + public Vault fromString(String displayLanguage) { + throw new UnsupportedOperationException(); + } + } } diff --git a/src/main/resources/fxml/eventview.fxml b/src/main/resources/fxml/eventview.fxml index 3d4d6aae3..6d1c59c0e 100644 --- a/src/main/resources/fxml/eventview.fxml +++ b/src/main/resources/fxml/eventview.fxml @@ -6,16 +6,20 @@ + + - + + + + + - + diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index 8328fa7d7..75229fc60 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -582,6 +582,7 @@ shareVault.hub.instruction.2=2. Grant access to team member in Cryptomator Hub. shareVault.hub.openHub=Open Cryptomator Hub # Event View +eventView.filter.allVaults=All event.vaultLocked.message=*********** event.vaultLocked.description=Unlock vault "%s" for details event.conflictResolved.description=Resolved conflict