refactor: make ingredient input cells capable of informal & formal inputs
This commit is contained in:
parent
16482a7017
commit
e4fc67e816
3 changed files with 56 additions and 30 deletions
|
|
@ -1,6 +1,12 @@
|
||||||
package client.scenes.recipe;
|
package client.scenes.recipe;
|
||||||
|
|
||||||
|
import commons.Unit;
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.scene.control.ChoiceBox;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
|
import javafx.scene.input.KeyCode;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A custom {@link OrderedEditableListCell<String>} for displaying and editing ingredients in an
|
* A custom {@link OrderedEditableListCell<String>} for displaying and editing ingredients in an
|
||||||
|
|
@ -9,10 +15,34 @@ import javafx.scene.control.TextField;
|
||||||
* @see IngredientListCtrl
|
* @see IngredientListCtrl
|
||||||
*/
|
*/
|
||||||
public class IngredientListCell extends OrderedEditableListCell<String> {
|
public class IngredientListCell extends OrderedEditableListCell<String> {
|
||||||
// TODO: change all this to use actual Ingredient objects
|
|
||||||
// and all that :)
|
|
||||||
@Override
|
@Override
|
||||||
protected String fromInput(TextField inputField) {
|
public void commitEdit(String newValue) {
|
||||||
return inputField.getText();
|
super.commitEdit(newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startEdit() {
|
||||||
|
super.startEdit();
|
||||||
|
TextField amountInput = new TextField("0");
|
||||||
|
ChoiceBox<Unit> 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,8 @@
|
||||||
package client.scenes.recipe;
|
package client.scenes.recipe;
|
||||||
|
|
||||||
import javafx.scene.control.ListCell;
|
import javafx.scene.control.ListCell;
|
||||||
import javafx.scene.control.TextField;
|
|
||||||
import javafx.scene.input.KeyCode;
|
|
||||||
|
|
||||||
public abstract class OrderedEditableListCell<T> extends ListCell<T> {
|
public abstract class OrderedEditableListCell<DataType> extends ListCell<DataType> {
|
||||||
/**
|
/**
|
||||||
* Get the display text for the given item, prefixed with its index.
|
* Get the display text for the given item, prefixed with its index.
|
||||||
* Looks like "1. description".
|
* Looks like "1. description".
|
||||||
|
|
@ -16,7 +14,7 @@ public abstract class OrderedEditableListCell<T> extends ListCell<T> {
|
||||||
return (this.getIndex() + 1) + ". " + item;
|
return (this.getIndex() + 1) + ". " + item;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void updateItem(T item, boolean empty) {
|
protected void updateItem(DataType item, boolean empty) {
|
||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
|
|
||||||
if (empty || item == null) {
|
if (empty || item == null) {
|
||||||
|
|
@ -27,26 +25,7 @@ public abstract class OrderedEditableListCell<T> extends ListCell<T> {
|
||||||
}
|
}
|
||||||
public void startEdit() {
|
public void startEdit() {
|
||||||
super.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).
|
* Check if the input is valid (non-empty).
|
||||||
*
|
*
|
||||||
|
|
@ -66,7 +45,7 @@ public abstract class OrderedEditableListCell<T> extends ListCell<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void commitEdit(T newValue) {
|
public void commitEdit(DataType newValue) {
|
||||||
this.setGraphic(null);
|
this.setGraphic(null);
|
||||||
|
|
||||||
if (!isInputValid(newValue.toString())) {
|
if (!isInputValid(newValue.toString())) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package client.scenes.recipe;
|
package client.scenes.recipe;
|
||||||
|
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
|
import javafx.scene.input.KeyCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A custom ListCell for displaying and editing ingredients in an
|
* A custom ListCell for displaying and editing ingredients in an
|
||||||
* RecipeStepList. Allows inline editing of ingredient names.
|
* RecipeStepList. Allows inline editing of ingredient names.
|
||||||
|
|
@ -9,7 +11,22 @@ import javafx.scene.control.TextField;
|
||||||
*/
|
*/
|
||||||
public class RecipeStepListCell extends OrderedEditableListCell<String> {
|
public class RecipeStepListCell extends OrderedEditableListCell<String> {
|
||||||
@Override
|
@Override
|
||||||
protected String fromInput(TextField inputField) {
|
public void startEdit() {
|
||||||
return inputField.getText();
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue