diff --git a/src/main/java/org/cryptomator/ui/eventview/EventListCellController.java b/src/main/java/org/cryptomator/ui/eventview/EventListCellController.java new file mode 100644 index 000000000..b813bc3d5 --- /dev/null +++ b/src/main/java/org/cryptomator/ui/eventview/EventListCellController.java @@ -0,0 +1,39 @@ +package org.cryptomator.ui.eventview; + +import org.cryptomator.common.ObservableUtil; +import org.cryptomator.event.Event; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.controls.FontAwesome5IconView; + +import javax.inject.Inject; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ObservableValue; +import javafx.scene.layout.HBox; + +public class EventListCellController implements FxController { + + private final ObjectProperty event; + private final ObservableValue description; + + public FontAwesome5IconView eventIcon; + public HBox eventListCell; + + @Inject + public EventListCellController() { + this.event = new SimpleObjectProperty<>(null); + this.description = ObservableUtil.mapWithDefault(event, e -> e.getClass().getName(),""); + } + + public void setEvent(Event item) { + event.set(item); + } + + public ObservableValue descriptionProperty() { + return description; + } + + public String getDescription() { + return description.getValue(); + } +} diff --git a/src/main/java/org/cryptomator/ui/eventview/EventListCellFactory.java b/src/main/java/org/cryptomator/ui/eventview/EventListCellFactory.java new file mode 100644 index 000000000..e690fd039 --- /dev/null +++ b/src/main/java/org/cryptomator/ui/eventview/EventListCellFactory.java @@ -0,0 +1,63 @@ +package org.cryptomator.ui.eventview; + +import org.cryptomator.event.Event; +import org.cryptomator.ui.common.FxmlLoaderFactory; +import org.cryptomator.ui.mainwindow.VaultListCellController; + +import javax.inject.Inject; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.control.ContentDisplay; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.util.Callback; +import java.io.IOException; +import java.io.UncheckedIOException; + +public class EventListCellFactory implements Callback, ListCell> { + + private static final String FXML_PATH = "/fxml/eventview_cell.fxml"; + + private final FxmlLoaderFactory fxmlLoaders; + + @Inject + EventListCellFactory(@EventViewWindow FxmlLoaderFactory fxmlLoaders) { + this.fxmlLoaders = fxmlLoaders; + } + + + @Override + public ListCell call(ListView eventListView) { + try { + FXMLLoader fxmlLoader = fxmlLoaders.load(FXML_PATH); + return new Cell(fxmlLoader.getRoot(), fxmlLoader.getController()); + } catch (IOException e) { + throw new UncheckedIOException("Failed to load %s.".formatted(FXML_PATH), e); + } + } + + private static class Cell extends ListCell { + + private final Parent root; + private final EventListCellController controller; + + public Cell(Parent root, EventListCellController controller) { + this.root = root; + this.controller = controller; + } + + @Override + protected void updateItem(Event item, boolean empty) { + super.updateItem(item, empty); + + if (empty) { + setText(null); + setGraphic(null); + } else { + setContentDisplay(ContentDisplay.GRAPHIC_ONLY); + setGraphic(root); + controller.setEvent(item); + } + } + } +} diff --git a/src/main/java/org/cryptomator/ui/eventview/EventViewController.java b/src/main/java/org/cryptomator/ui/eventview/EventViewController.java index d29053f0a..bec9c844c 100644 --- a/src/main/java/org/cryptomator/ui/eventview/EventViewController.java +++ b/src/main/java/org/cryptomator/ui/eventview/EventViewController.java @@ -15,18 +15,21 @@ public class EventViewController implements FxController { private final SortedList reversedEventList; private final ObservableList eventList; + private final EventListCellFactory cellFactory; @FXML ListView eventListView; @Inject - public EventViewController(ObservableList eventList) { + public EventViewController(ObservableList eventList, EventListCellFactory cellFactory) { reversedEventList = new SortedList<>(eventList, Comparator.reverseOrder()); this.eventList = eventList; + this.cellFactory = cellFactory; } @FXML public void initialize() { + eventListView.setCellFactory(cellFactory); eventListView.setItems(reversedEventList); } diff --git a/src/main/java/org/cryptomator/ui/eventview/EventViewModule.java b/src/main/java/org/cryptomator/ui/eventview/EventViewModule.java index 23037c2d5..4c981bf50 100644 --- a/src/main/java/org/cryptomator/ui/eventview/EventViewModule.java +++ b/src/main/java/org/cryptomator/ui/eventview/EventViewModule.java @@ -57,6 +57,6 @@ abstract class EventViewModule { @Binds @IntoMap - @FxControllerKey(UpdateEventViewController.class) - abstract FxController bindUpdateEventViewController(UpdateEventViewController controller); + @FxControllerKey(EventListCellController.class) + abstract FxController bindEventListCellController(EventListCellController controller); } diff --git a/src/main/resources/fxml/eventview_cell.fxml b/src/main/resources/fxml/eventview_cell.fxml new file mode 100644 index 000000000..354b387f1 --- /dev/null +++ b/src/main/resources/fxml/eventview_cell.fxml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + diff --git a/src/main/resources/fxml/eventview_update.fxml b/src/main/resources/fxml/eventview_update.fxml deleted file mode 100644 index aeedc361c..000000000 --- a/src/main/resources/fxml/eventview_update.fxml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - Update Available! - \ No newline at end of file