package progress;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import progress.variants.ConfigurableProgressButton;
import progress.variants.ConfigurableProgressButton;
import progress.variants.ProgressButton;
import progress.variants.StackPaneStrategy;
import progress.variants.VBoxStrategy;
import java.util.List;
import static java.util.Arrays.asList;
public class ProgressButtonDemo extends Application {
public static void main(String[] args) {
launch(args);
}
private final LongRunningAction longRunning = new LongRunningAction();
private final List<ProgressButton> allProgressDisplays = Lists.newArrayList();
@Override
public void start(Stage stage) throws Exception {
VBox topLevelContainer = new VBox();
HBox buttonBar = createButtonBar();
HBox controls = createControls();
topLevelContainer.getChildren().addAll(buttonBar, controls);
for (final ProgressButton progressDisplay : allProgressDisplays) {
longRunning.onCompletion(new LongRunningAction.VoidCallback() {
@Override
public Void call(Void aVoid) {
progressDisplay.hideProgress();
return null;
}
});
}
for (final ProgressButton progressDisplay : allProgressDisplays) {
longRunning.onStart(new LongRunningAction.VoidCallback() {
@Override
public Void call(Void aVoid) {
progressDisplay.showProgress();
return null;
}
});
}
for (ProgressButton progressDisplay : allProgressDisplays) {
progressDisplay.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
longRunning.start();
}
});
}
stage.setScene(new Scene(topLevelContainer));
stage.show();
}
private HBox createControls() {
HBox controls = new HBox();
Button complete = new Button("completed");
complete.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
longRunning.completed();
}
});
controls.getChildren().add(complete);
return controls;
}
private HBox createButtonBar() {
HBox buttonBar = new HBox();
ProgressButton barVBox = ConfigurableProgressButton.aBarWith(new VBoxStrategy());
ProgressButton barStackPane = ConfigurableProgressButton.aBarWith(new StackPaneStrategy());
ProgressButton wheelStackPane = ConfigurableProgressButton.aWheelWith(new StackPaneStrategy());
allProgressDisplays.addAll(asList(barVBox, barStackPane, wheelStackPane));
buttonBar.getChildren().addAll(allProgressDisplays());
return buttonBar;
}
private List<Node> allProgressDisplays() {
return Lists.transform(allProgressDisplays, new Function<ProgressButton, Node>() {
@Override
public Node apply(ProgressButton input) {
return input.getNode();
}
});
}
}