mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-04-19 17:16:53 -04:00
use fixed width for check state icon in list
This commit is contained in:
@@ -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<Check> {
|
||||
|
||||
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<Check> {
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user