diff --git a/client/src/main/java/client/scenes/recipe/IngredientListCell.java b/client/src/main/java/client/scenes/recipe/IngredientListCell.java index f420bff..3450b58 100644 --- a/client/src/main/java/client/scenes/recipe/IngredientListCell.java +++ b/client/src/main/java/client/scenes/recipe/IngredientListCell.java @@ -1,6 +1,12 @@ package client.scenes.recipe; +import commons.Unit; +import javafx.collections.FXCollections; +import javafx.scene.control.ChoiceBox; import javafx.scene.control.TextField; +import javafx.scene.input.KeyCode; +import javafx.scene.layout.HBox; + /** * A custom {@link OrderedEditableListCell} for displaying and editing ingredients in an @@ -9,10 +15,34 @@ import javafx.scene.control.TextField; * @see IngredientListCtrl */ public class IngredientListCell extends OrderedEditableListCell { - // TODO: change all this to use actual Ingredient objects - // and all that :) @Override - protected String fromInput(TextField inputField) { - return inputField.getText(); + public void commitEdit(String newValue) { + super.commitEdit(newValue); + } + + @Override + public void startEdit() { + super.startEdit(); + TextField amountInput = new TextField("0"); + ChoiceBox unitChoice = new ChoiceBox<>(); + unitChoice.setItems(FXCollections.observableArrayList(Unit.GRAM, Unit.KILOGRAM)); + TextField nameInput = new TextField("ingredient"); + HBox container = new HBox(amountInput, unitChoice, nameInput); + container.setOnKeyReleased(event -> { + if (event.getCode() != KeyCode.ENTER) { + return; + } + Unit unit = unitChoice.getValue(); + String name = nameInput.getText(); + if (unit == null) { + String desc = amountInput.getText(); + super.commitEdit(desc + " " + name); + return; + } + int amount = Integer.parseInt(amountInput.getText()); + super.commitEdit(amount + " " + unit + " of " + name); + }); + this.setText(null); + this.setGraphic(container); } } diff --git a/client/src/main/java/client/scenes/recipe/OrderedEditableListCell.java b/client/src/main/java/client/scenes/recipe/OrderedEditableListCell.java index 8716c3a..2a4b861 100644 --- a/client/src/main/java/client/scenes/recipe/OrderedEditableListCell.java +++ b/client/src/main/java/client/scenes/recipe/OrderedEditableListCell.java @@ -1,10 +1,8 @@ package client.scenes.recipe; import javafx.scene.control.ListCell; -import javafx.scene.control.TextField; -import javafx.scene.input.KeyCode; -public abstract class OrderedEditableListCell extends ListCell { +public abstract class OrderedEditableListCell extends ListCell { /** * Get the display text for the given item, prefixed with its index. * Looks like "1. description". @@ -16,7 +14,7 @@ public abstract class OrderedEditableListCell extends ListCell { return (this.getIndex() + 1) + ". " + item; } @Override - protected void updateItem(T item, boolean empty) { + protected void updateItem(DataType item, boolean empty) { super.updateItem(item, empty); if (empty || item == null) { @@ -27,26 +25,7 @@ public abstract class OrderedEditableListCell extends ListCell { } public void startEdit() { super.startEdit(); - - TextField textField = new TextField(this.getItem().toString()); - - // Commit edit on Enter key press - textField.setOnAction(event -> { - this.commitEdit(fromInput(textField)); - }); - - // Cancel edit on Escape key press - textField.setOnKeyReleased(event -> { - if (event.getCode() == KeyCode.ESCAPE) { - this.cancelEdit(); - } - }); - - this.setText(null); - this.setGraphic(textField); } - - protected abstract T fromInput(TextField inputField); /** * Check if the input is valid (non-empty). * @@ -66,7 +45,7 @@ public abstract class OrderedEditableListCell extends ListCell { } @Override - public void commitEdit(T newValue) { + public void commitEdit(DataType newValue) { this.setGraphic(null); if (!isInputValid(newValue.toString())) { diff --git a/client/src/main/java/client/scenes/recipe/RecipeStepListCell.java b/client/src/main/java/client/scenes/recipe/RecipeStepListCell.java index bf57c13..91578e8 100644 --- a/client/src/main/java/client/scenes/recipe/RecipeStepListCell.java +++ b/client/src/main/java/client/scenes/recipe/RecipeStepListCell.java @@ -1,6 +1,8 @@ package client.scenes.recipe; import javafx.scene.control.TextField; +import javafx.scene.input.KeyCode; + /** * A custom ListCell for displaying and editing ingredients in an * RecipeStepList. Allows inline editing of ingredient names. @@ -9,7 +11,22 @@ import javafx.scene.control.TextField; */ public class RecipeStepListCell extends OrderedEditableListCell { @Override - protected String fromInput(TextField inputField) { - return inputField.getText(); + public void startEdit() { + TextField textField = new TextField(this.getItem()); + + // Commit edit on Enter key press + textField.setOnAction(event -> { + this.commitEdit(textField.getText()); + }); + + // Cancel edit on Escape key press + textField.setOnKeyReleased(event -> { + if (event.getCode() == KeyCode.ESCAPE) { + this.cancelEdit(); + } + }); + + this.setText(null); + this.setGraphic(textField); } }