/* * Copyright (c) 2014 Dennis Fischer. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0+ * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: Dennis Fischer */ package de.chaosfisch.uploader.gui.renderer; import com.google.inject.Inject; import javafx.application.Platform; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.control.Label; import javafx.scene.control.LabelBuilder; import javafx.scene.control.ProgressBar; import javafx.scene.control.ProgressBarBuilder; import javafx.scene.input.MouseEvent; import javafx.scene.layout.StackPane; import org.apache.commons.configuration.Configuration; public class ProgressNodeRenderer extends StackPane { public static final String DISPLAY_PROGRESS = "display_progress"; private final ProgressBar progressBar = ProgressBarBuilder.create().scaleY(2).prefWidth(500).progress(0).build(); private final Label progressSpeed = LabelBuilder.create().build(); private final Label progressEta = LabelBuilder.create().build(); private final Label progressFinish = LabelBuilder.create().build(); private final Label progressBytes = LabelBuilder.create().build(); @Inject public ProgressNodeRenderer(final Configuration configuration) { final Label progressInfo = LabelBuilder.create().build(); progressInfo.textProperty().bind(progressBar.progressProperty().multiply(100).asString("%.2f%%")); progressInfo.setAlignment(Pos.CENTER_LEFT); progressInfo.prefWidthProperty().bind(progressBar.widthProperty().subtract(6)); progressEta.alignmentProperty().set(Pos.CENTER_RIGHT); progressEta.prefWidthProperty().bind(progressBar.widthProperty().subtract(6)); progressFinish.alignmentProperty().set(Pos.CENTER_RIGHT); progressFinish.prefWidthProperty().bind(progressBar.widthProperty().subtract(6)); progressFinish.setVisible(configuration.getBoolean(DISPLAY_PROGRESS, false)); progressBytes.setVisible(configuration.getBoolean(DISPLAY_PROGRESS, false)); progressSpeed.setVisible(!configuration.getBoolean(DISPLAY_PROGRESS, false)); progressEta.setVisible(!configuration.getBoolean(DISPLAY_PROGRESS, false)); getChildren().addAll(progressBar, progressInfo, progressEta, progressSpeed, progressFinish, progressBytes); setOnMouseEntered(new EventHandler<MouseEvent>() { @Override public void handle(final MouseEvent me) { progressFinish.setVisible(!configuration.getBoolean(DISPLAY_PROGRESS, false)); progressBytes.setVisible(!configuration.getBoolean(DISPLAY_PROGRESS, false)); progressSpeed.setVisible(configuration.getBoolean(DISPLAY_PROGRESS, false)); progressEta.setVisible(configuration.getBoolean(DISPLAY_PROGRESS, false)); } }); setOnMouseExited(new EventHandler<MouseEvent>() { @Override public void handle(final MouseEvent me) { progressFinish.setVisible(configuration.getBoolean(DISPLAY_PROGRESS, false)); progressBytes.setVisible(configuration.getBoolean(DISPLAY_PROGRESS, false)); progressSpeed.setVisible(!configuration.getBoolean(DISPLAY_PROGRESS, false)); progressEta.setVisible(!configuration.getBoolean(DISPLAY_PROGRESS, false)); } }); } public void setProgress(final double progress) { Platform.runLater(new Runnable() { @Override public void run() { progressBar.setProgress(progress); } }); } public void setEta(final String eta) { Platform.runLater(new Runnable() { @Override public void run() { progressEta.setText(eta); } }); } public void setSpeed(final String speed) { Platform.runLater(new Runnable() { @Override public void run() { progressSpeed.setText(speed); } }); } public void setFinish(final String finish) { Platform.runLater(new Runnable() { @Override public void run() { progressFinish.setText(finish); } }); } public void setBytes(final String bytes) { Platform.runLater(new Runnable() { @Override public void run() { progressBytes.setText(bytes); } }); } }