diff --git a/src/main/java/org/cryptomator/ui/health/CheckListCell.java b/src/main/java/org/cryptomator/ui/health/CheckListCell.java index af8e3446b..ef8a0a686 100644 --- a/src/main/java/org/cryptomator/ui/health/CheckListCell.java +++ b/src/main/java/org/cryptomator/ui/health/CheckListCell.java @@ -8,21 +8,26 @@ import org.cryptomator.ui.controls.FontAwesome5IconView; import javafx.beans.binding.Bindings; import javafx.geometry.Insets; import javafx.geometry.Pos; -import javafx.scene.Node; import javafx.scene.control.CheckBox; import javafx.scene.control.ContentDisplay; import javafx.scene.control.ListCell; +import javafx.scene.layout.StackPane; class CheckListCell extends ListCell { private final FontAwesome5IconView stateIcon = new FontAwesome5IconView(); private CheckBox checkBox = new CheckBox(); + private final StackPane graphicContainer = new StackPane(stateIcon, checkBox); CheckListCell() { setPadding(new Insets(6)); setAlignment(Pos.CENTER_LEFT); setContentDisplay(ContentDisplay.LEFT); getStyleClass().add("label"); + graphicContainer.minWidth(20); + graphicContainer.maxWidth(20); + graphicContainer.setAlignment(Pos.CENTER); + EasyBind.includeWhen(stateIcon.getStyleClass(), "glyph-icon-muted", stateIcon.glyphProperty().isEqualTo(FontAwesome5Icon.INFO_CIRCLE)); EasyBind.includeWhen(stateIcon.getStyleClass(), "glyph-icon-primary", stateIcon.glyphProperty().isEqualTo(FontAwesome5Icon.CHECK)); EasyBind.includeWhen(stateIcon.getStyleClass(), "glyph-icon-orange", stateIcon.glyphProperty().isEqualTo(FontAwesome5Icon.EXCLAMATION_TRIANGLE)); @@ -34,26 +39,21 @@ class CheckListCell extends ListCell { super.updateItem(item, empty); if (item != null) { setText(item.getLocalizedName()); - graphicProperty().bind(EasyBind.map(item.stateProperty(),this::chooseNodeFromState)); + setGraphic(graphicContainer); + checkBox.visibleProperty().bind(Bindings.createBooleanBinding(() -> item.getState() == Check.CheckState.RUNNABLE, item.stateProperty())); + stateIcon.visibleProperty().bind(Bindings.createBooleanBinding(() -> item.getState() != Check.CheckState.RUNNABLE, item.stateProperty())); stateIcon.glyphProperty().bind(Bindings.createObjectBinding(() -> glyphForState(item), item.stateProperty(), item.highestResultSeverityProperty())); checkBox.selectedProperty().bindBidirectional(item.chosenForExecutionProperty()); } else { - graphicProperty().unbind(); + graphicProperty(); + checkBox.visibleProperty().unbind(); + stateIcon.visibleProperty().unbind(); setGraphic(null); setText(null); checkBox.selectedProperty().unbind(); } } - // see getGlyph() for relevant glyphs: - private Node chooseNodeFromState(Check.CheckState state) { - if (state == Check.CheckState.RUNNABLE) { - return checkBox; - } else { - return stateIcon; - } - } - private FontAwesome5Icon glyphForState(Check item) { return switch (item.getState()) { case RUNNABLE -> null;