diff --git a/client/src/main/java/client/scenes/nutrition/NutritionDetailsCtrl.java b/client/src/main/java/client/scenes/nutrition/NutritionDetailsCtrl.java index ebd9260..383c2de 100644 --- a/client/src/main/java/client/scenes/nutrition/NutritionDetailsCtrl.java +++ b/client/src/main/java/client/scenes/nutrition/NutritionDetailsCtrl.java @@ -21,6 +21,7 @@ import javafx.scene.layout.VBox; import javafx.util.converter.NumberStringConverter; import java.io.IOException; +import java.util.concurrent.Callable; import java.util.logging.Logger; public class NutritionDetailsCtrl implements LocaleAware { @@ -57,6 +58,22 @@ public class NutritionDetailsCtrl implements LocaleAware { this.server = server; } + Callable getEstimatedKcalLabel() { + IngredientViewModel vm = this.ingredient.get(); + return () -> String.format(getLocaleString("app.kcal") + " %.1f kcal/100g", vm.getKcal()); + } + + Callable getUsageLabel() { + IngredientViewModel vm = this.ingredient.get(); + return () -> { + Long id = this.ingredient.get().toIngredient().getId(); + logger.info("Fetching usage for ingredient ID: " + id); + return !id.equals(0L) ? String.format( + getLocaleString("app.label.usage.part") + " %d " + getLocaleString("app.word.recipe.n"), + server.getIngredientUsage(id)) : ""; + }; + } + @Override public void initializeComponents() { Platform.runLater(() -> { @@ -65,19 +82,8 @@ public class NutritionDetailsCtrl implements LocaleAware { this.fatInputElement.textProperty().bindBidirectional(vm.fatProperty(), new NumberStringConverter()); this.proteinInputElement.textProperty().bindBidirectional(vm.proteinProperty(), new NumberStringConverter()); this.carbInputElement.textProperty().bindBidirectional(vm.carbsProperty(), new NumberStringConverter()); - this.estimatedKcalLabel.textProperty().bind(Bindings.createStringBinding( - () -> String.format(getLocaleString("app.kcal") + " %.1f kcal/100g", vm.getKcal()), vm.kcalProperty() - )); - this.usageLabel.textProperty().bind(Bindings.createStringBinding( - () -> { - Long id = this.ingredient.get().toIngredient().getId(); - logger.info("Fetching usage for ingredient ID: " + id); - return !id.equals(0L) ? String.format( - getLocaleString("app.label.usage.part") + " %d " + getLocaleString("app.word.recipe.n"), - server.getIngredientUsage(id)) : ""; - }, - this.ingredient.get().idProperty() - )); + this.estimatedKcalLabel.textProperty().bind(Bindings.createStringBinding(this.getEstimatedKcalLabel(), vm.kcalProperty())); + this.usageLabel.textProperty().bind(Bindings.createStringBinding(this.getUsageLabel(), this.ingredient.get().idProperty())); }); this.nutritionValueContainer.addEventHandler(KeyEvent.KEY_RELEASED, event -> { if (event.getCode() != KeyCode.ENTER) { @@ -101,7 +107,15 @@ public class NutritionDetailsCtrl implements LocaleAware { @Override public void updateText() { - + try { + this.estimatedKcalLabel.textProperty().setValue(this.getEstimatedKcalLabel().call()); + this.usageLabel.textProperty().setValue(this.getUsageLabel().call()); + this.fatInputLabel.setText(this.getLocaleString("menu.nutrition.fat")); + this.proteinInputLabel.setText(this.getLocaleString("menu.nutrition.protein")); + this.carbInputLabel.setText(this.getLocaleString("menu.nutrition.carbs")); + } catch (Exception e) { + throw new RuntimeException(e); + } } public void setVisible(boolean isVisible) { @@ -134,6 +148,7 @@ public class NutritionDetailsCtrl implements LocaleAware { public LocaleManager getLocaleManager() { return manager; } + public void handleNutritionSaveClick(ActionEvent actionEvent) throws IOException, InterruptedException { Ingredient newIngredient = updateIngredient(); this.ingredient.get().updateFrom(server.updateIngredient(newIngredient)); diff --git a/client/src/main/java/client/scenes/nutrition/NutritionViewCtrl.java b/client/src/main/java/client/scenes/nutrition/NutritionViewCtrl.java index df8bdad..03e19a2 100644 --- a/client/src/main/java/client/scenes/nutrition/NutritionViewCtrl.java +++ b/client/src/main/java/client/scenes/nutrition/NutritionViewCtrl.java @@ -1,10 +1,14 @@ package client.scenes.nutrition; import com.google.inject.Inject; +import javafx.fxml.FXML; public class NutritionViewCtrl { @Inject public NutritionViewCtrl( ) { } + + @FXML + NutritionDetailsCtrl nutritionDetailsController; } diff --git a/client/src/main/java/client/scenes/recipe/RecipeDetailCtrl.java b/client/src/main/java/client/scenes/recipe/RecipeDetailCtrl.java index 4948408..812cc3b 100644 --- a/client/src/main/java/client/scenes/recipe/RecipeDetailCtrl.java +++ b/client/src/main/java/client/scenes/recipe/RecipeDetailCtrl.java @@ -411,6 +411,17 @@ public class RecipeDetailCtrl implements LocaleAware { addToListButton.setText(getLocaleString("app.word.shop")); scaleLabel.setText(getLocaleString("app.word.scale")); servingLabel.setText(getLocaleString("app.word.serving.n")); + + if (this.recipeView != null && this.recipeView.getRecipe() != null) { + inferredKcalLabel.textProperty().bind(Bindings.createStringBinding(() -> + String.format(getLocaleString("app.label.inferred-kcal") + " %.1f kcal/100g", + Double.isNaN(this.recipeView.scaledKcalProperty().get()) ? + 0.0 : this.recipeView.scaledKcalProperty().get()) + , this.recipeView.scaledKcalProperty())); + inferredServeSizeLabel.textProperty().bind(Bindings.createStringBinding( + () -> String.format(getLocaleString("app.label.inferred-size") + " %.1f g", recipeView.servingSizeProperty().get()), + recipeView.servingSizeProperty())); + } } @Override diff --git a/client/src/main/resources/client/scenes/nutrition/NutritionView.fxml b/client/src/main/resources/client/scenes/nutrition/NutritionView.fxml index 321bce3..0a523c9 100644 --- a/client/src/main/resources/client/scenes/nutrition/NutritionView.fxml +++ b/client/src/main/resources/client/scenes/nutrition/NutritionView.fxml @@ -12,6 +12,6 @@ prefHeight="400.0" prefWidth="600.0"> - +