Added graphic to header for wizard page. Changed WizardPane -> WizardPage

This commit is contained in:
nathan 2015-08-09 16:48:17 +02:00
parent 61b64658e1
commit a4217e8c84
2 changed files with 39 additions and 21 deletions

View File

@ -66,7 +66,7 @@ import java.util.function.Consumer;
* <p>The API for creating multi-page Wizards, based on JavaFX {@link Dialog} API.<br/>
* Wizard can be setup in following few steps:<p/>
* <ul>
* <li>Design wizard pages by inheriting them from {@link WizardPane}</li>
* <li>Design wizard pages by inheriting them from {@link WizardPage}</li>
* <li>Define wizard flow by implementing {@link org.controlsfx.dialog.Wizard.Flow}</li>
* <li>Create and instance of the Wizard and assign flow to it</li>
* <li>Execute the wizard using showAndWait method</li>
@ -125,8 +125,8 @@ public class Wizard {
private final ObservableMap<String, Object> settings = FXCollections.observableHashMap();
final Stack<WizardPane> pageHistory = new Stack<>();
Optional<WizardPane> currentPage = Optional.empty();
final Stack<WizardPage> pageHistory = new Stack<>();
Optional<WizardPage> currentPage = Optional.empty();
private final BooleanProperty invalidProperty = new SimpleBooleanProperty(false);
private final StringProperty invalidPropertyStrings = new SimpleStringProperty();
@ -259,10 +259,10 @@ public class Wizard {
validatePopover(newValue);
});
Consumer<WizardPane> consumer = new Consumer<WizardPane>() {
Consumer<WizardPage> consumer = new Consumer<WizardPage>() {
@Override
public
void accept(final WizardPane currentPage) {
void accept(final WizardPage currentPage) {
if (currentPage.autoFocusNext) {
Platform.runLater(BUTTON_NEXT::requestFocus);
}
@ -301,7 +301,10 @@ public class Wizard {
graphicRegion = new VBox();
ToolBar region = new ToolBar(graphicRegion, headerText);
Region spacer2 = new Region();
spacer2.setMinWidth(10);
ToolBar region = new ToolBar(graphicRegion, spacer2, headerText);
region.setPadding(new Insets(15, 12, 15, 12));
borderPane.setTop(region);
@ -646,7 +649,7 @@ public class Wizard {
return;
}
Optional<WizardPane> prevPage = Optional.ofNullable(pageHistory.isEmpty() ? null : pageHistory.peek());
Optional<WizardPage> prevPage = Optional.ofNullable(pageHistory.isEmpty() ? null : pageHistory.peek());
prevPage.ifPresent(page -> {
// if we are going forward in the wizard, we read in the settings
// from the page and store them in the settings map.
@ -787,7 +790,7 @@ public class Wizard {
private int settingCounter;
private
void readSettings(WizardPane page) {
void readSettings(WizardPage page) {
// for now we cannot know the structure of the page, so we just drill down
// through the entire scenegraph (from page.anchorPane down) until we get
// to the leaf nodes. We stop only if we find a node that is a
@ -882,7 +885,7 @@ public class Wizard {
*
* @return {@link Optional} value containing the next wizard page.
*/
Optional<WizardPane> advance(WizardPane currentPage);
Optional<WizardPage> advance(WizardPage currentPage);
/**
* Check if advancing to the next page is possible
@ -892,38 +895,38 @@ public class Wizard {
*
* @return true if it is possible to advance to the next page, false otherwise.
*/
boolean canAdvance(WizardPane currentPage);
boolean canAdvance(WizardPage currentPage);
}
/**
* LinearFlow is an implementation of the {@link org.controlsfx.dialog.Wizard.Flow} interface, designed to support the most common type
* of wizard flow - namely, a linear wizard page flow (i.e. through all pages in the order that they are specified). Therefore, this
* {@link Flow} implementation simply traverses a collections of {@link WizardPane WizardPanes}.
* {@link Flow} implementation simply traverses a collections of {@link WizardPage WizardPanes}.
* <p>
* <p>For example of how to use this API, please refer to the {@link org.controlsfx.dialog.Wizard} documentation</p>
*
* @see org.controlsfx.dialog.Wizard
* @see WizardPane
* @see WizardPage
*/
public static
class LinearFlow implements Wizard.Flow {
private final List<WizardPane> pages;
private final List<WizardPage> pages;
/**
* Creates a new LinearFlow instance that will allow for stepping through the given collection of {@link WizardPane} instances.
* Creates a new LinearFlow instance that will allow for stepping through the given collection of {@link WizardPage} instances.
*/
public
LinearFlow(Collection<WizardPane> pages) {
LinearFlow(Collection<WizardPage> pages) {
this.pages = new ArrayList<>(pages);
}
/**
* Creates a new LinearFlow instance that will allow for stepping through the given varargs array of {@link WizardPane} instances.
* Creates a new LinearFlow instance that will allow for stepping through the given varargs array of {@link WizardPage} instances.
*/
public
LinearFlow(WizardPane... pages) {
LinearFlow(WizardPage... pages) {
this(Arrays.asList(pages));
}
@ -932,7 +935,7 @@ public class Wizard {
*/
@Override
public
Optional<WizardPane> advance(WizardPane currentPage) {
Optional<WizardPage> advance(WizardPage currentPage) {
int pageIndex = pages.indexOf(currentPage);
return Optional.ofNullable(pages.get(++pageIndex));
}
@ -942,7 +945,7 @@ public class Wizard {
*/
@Override
public
boolean canAdvance(WizardPane currentPage) {
boolean canAdvance(WizardPage currentPage) {
int pageIndex = pages.indexOf(currentPage);
return pages.size() - 1 > pageIndex;
}

View File

@ -1,6 +1,7 @@
package dorkbox.util.javafx;
import dorkbox.util.JavaFxUtil;
import javafx.application.Platform;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
@ -27,7 +28,7 @@ import java.util.Collection;
*/
@SuppressWarnings("UnusedParameters")
public
class WizardPane {
class WizardPage {
String headerText;
Font headerFont;
@ -46,7 +47,7 @@ class WizardPane {
* Creates an instance of wizard pane.
*/
public
WizardPane() {
WizardPage() {
validationSupport.validationResultProperty()
.addListener((ObservableValue<? extends ValidationResult> o, ValidationResult ov, ValidationResult nv) -> {
final Collection<ValidationMessage> errors = nv.getErrors();
@ -138,6 +139,20 @@ class WizardPane {
public
void registerValidator(final Control control, final Validator<Object> validator) {
Platform.runLater(() -> {
validator.apply(control, null);
// Optional<ValidationDecoration> odecorator = Optional.ofNullable(validationSupport.getValidationDecorator());
// for (Control target : validationSupport.getRegisteredControls()) {
// odecorator.ifPresent(decorator -> {
// decorator.removeDecorations(target);
// decorator.applyRequiredDecoration(target);
// validationResults.get(target);
// Optional<ValidationMessage> highestMessage = validationSupport.getHighestMessage(target);
// highestMessage.ifPresent(msg -> decorator.applyValidationDecoration(msg));
// });
// }
});
this.validationSupport.registerValidator(control, validator);
}