package de.calette.mephisto3.ui.weather; import callete.api.services.weather.Weather; import de.calette.mephisto3.util.ComponentUtil; import de.calette.mephisto3.util.TransitionUtil; import javafx.animation.ParallelTransition; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import java.text.SimpleDateFormat; /** * A single forecast panel. */ public class WeatherForecastPanel extends VBox { private static final String FORECAST_DAY_FORMAT = "EE, dd."; private static final SimpleDateFormat forecastDayFormat = new SimpleDateFormat(FORECAST_DAY_FORMAT); private Text tempLabel; private Text titleLabel; private ImageView img; public WeatherForecastPanel(Weather forecast) { super(3); getStyleClass().add("forecast-panel"); setAlignment(Pos.TOP_CENTER); setPadding(new Insets(0, 10, 10, 10)); String day = forecastDayFormat.format(forecast.getForecastDate()); titleLabel = ComponentUtil.createText(day, "default-white-16", this); img = new ImageView(new Image(WeatherConditionMapper.getWeatherForecastIcon(forecast), 55, 55, false, true)); getChildren().add(img); tempLabel = ComponentUtil.createText(forecast.getHighTemp() + "/" + forecast.getLowTemp() + " °C", "forecast-temp", this); } public void setForecast(final Weather forecast) { final Image image = new Image(WeatherConditionMapper.getWeatherForecastIcon(forecast)); ParallelTransition pt = new ParallelTransition( TransitionUtil.createOutFader(tempLabel), TransitionUtil.createOutFader(titleLabel), TransitionUtil.createOutFader(img) ); pt.setOnFinished(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { String day = forecastDayFormat.format(forecast.getForecastDate()); titleLabel.setText(day); img.setImage(image); tempLabel.setText(forecast.getHighTemp() + "/" + forecast.getLowTemp() + " °C"); ParallelTransition inFader = new ParallelTransition( TransitionUtil.createInFader(tempLabel), TransitionUtil.createInFader(titleLabel), TransitionUtil.createInFader(img) ); inFader.play(); } }); pt.play(); } }