package regexgolf2.ui.subcomponents.challengelisting.challengecell; import java.io.IOException; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.control.ContentDisplay; import javafx.scene.control.Label; import javafx.scene.control.ListCell; import javafx.scene.layout.AnchorPane; import javafx.scene.paint.Color; import regexgolf2.ui.subcomponents.scoredisplay.SolvedDisplayUI; public class ChallengeCellUI extends ListCell<ChallengeItem> { @FXML private Label _nameLabel; @FXML private Label _scoreLabel; private final SolvedDisplayUI _scoreUI; @FXML private Label _changeIndicator; private final AnchorPane _rootNode; private ChallengeItem _item; public ChallengeCellUI() throws IOException { FXMLLoader loader = new FXMLLoader(getClass().getResource("ChallengeCellUI.fxml")); loader.setController(this); _rootNode = loader.load(); assert _nameLabel != null; assert _scoreLabel != null; assert _changeIndicator != null; _scoreUI = new SolvedDisplayUI(_scoreLabel); this.setPrefWidth(0.0); _rootNode.prefWidthProperty().bind(this.widthProperty().subtract(10.0)); setContentDisplay(ContentDisplay.GRAPHIC_ONLY); } @Override protected void updateItem(ChallengeItem item, boolean empty) { super.updateItem(item, empty); if (item == null) { setGraphic(null); } else { setGraphic(_rootNode); _nameLabel.textProperty().unbind(); _changeIndicator.visibleProperty().unbind(); _scoreUI.amountRequirementsProperty().unbind(); _scoreUI.amountCompliedRequirementsProperty().unbind(); _scoreUI.isHighlightedProperty().unbind(); _item = item; _nameLabel.textProperty().bind(_item.nameProperty()); _changeIndicator.visibleProperty().bind(_item.isChangedProperty()); _scoreUI.amountRequirementsProperty().bind(_item.amountRequirementsProperty()); _scoreUI.amountCompliedRequirementsProperty().bind(_item.amountCompliedRequirementsProperty()); _scoreUI.isHighlightedProperty().bind(_item.isSolvedProperty()); } } @Override public void updateSelected(boolean arg0) { //TODO fix the coloring of the scorelabel text super.updateSelected(arg0); if (isSelected()) _scoreLabel.setTextFill(Color.WHITE); else _scoreUI.refresh(); } }