retrostyle
2/15/2013 - 8:20 AM

A Simple Wizard for Vaadin7

A Simple Wizard for Vaadin7

import java.util.ArrayList;
import java.util.List;

import org.vaadin.teemu.wizards.WizardStep;

import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;

@SuppressWarnings("serial")
public class WizardPlus extends VerticalLayout {

    private HorizontalLayout buttonFrame = new HorizontalLayout();

	private List<WizardStep> step = new ArrayList<WizardStep>();
	private int stepCount = 0;
	private int stepPointer = 0;

	private Button backButton = new Button("BACK");
	private Button forwardButton = new Button("FORWARD");
	private Button finishButton = new Button("FINISH");
	private Button cancelButton = new Button("CANCEL");

	public WizardPlus() {
		setSizeFull();
		setMargin(true);

		backButton.addListener(new Button.ClickListener() {
			@Override
			public void buttonClick(ClickEvent event) {
				stepPointer--;
				if (stepPointer == 0) {
					backButton.setEnabled(false);
				}
				finishButton.setEnabled(false);
				forwardButton.setEnabled(true);
				
				setCurrentStep();
			}
		});

		forwardButton.addListener(new Button.ClickListener() {
			@Override
			public void buttonClick(ClickEvent event) {
				stepPointer++;
				if (stepPointer < stepCount) {
					backButton.setEnabled(true);
					if (stepPointer + 1 == stepCount) {
						finishButton.setEnabled(true);
						forwardButton.setEnabled(false);
					}
					
					setCurrentStep();
				} else {
					stepPointer--;
				}
			}
		});
		backButton.setEnabled(false);

		buttonFrame.setWidth(100, Sizeable.UNITS_PERCENTAGE);

		HorizontalLayout hl = new HorizontalLayout();
		hl.setSpacing(true);
		hl.addComponent(cancelButton);
		hl.addComponent(backButton);
		hl.addComponent(forwardButton);
		hl.addComponent(finishButton);

		buttonFrame.addComponent(hl);

		buttonFrame.setComponentAlignment(hl, Alignment.MIDDLE_RIGHT);

	}

	public void addStep(WizardStep wizardStep) {
		step.add(wizardStep);
		stepCount++;
		finishButton.setEnabled(false);
	}

	public void removeStep(int stepPosition) {
		if (stepPosition < stepCount) {
			step.remove(stepPosition);
			stepCount--;
			if (stepCount == 1) {
				finishButton.setEnabled(false);
			}
		}
	}

	public void setCurrentStep() {
		removeAllComponents();
		if (stepCount > 0) {
			addComponent(new Label("<b>" + (stepPointer + 1) + "/" + stepCount + " "
					+ step.get(stepPointer).getCaption() + "</b>", Label.CONTENT_XHTML));
			// addComponent(new Label((stepPointer + 1) * 100 / stepCount + "% " +
			// step.get(stepPointer).getCaption()));

			addComponent(step.get(stepPointer).getContent());
		}
		addComponent(buttonFrame);
	}

	@Override
	public void attach() {
		setCurrentStep();
	}

	public Button getBackButton() {
		return backButton;
	}

	public void setBackButton(Button backButton) {
		this.backButton = backButton;
	}

	public Button getForwardButton() {
		return forwardButton;
	}

	public void setForwardButton(Button forwardButton) {
		this.forwardButton = forwardButton;
	}

	public Button getFinishButton() {
		return finishButton;
	}

	public void setFinishButton(Button finishButton) {
		this.finishButton = finishButton;
	}

	public Button getCancelButton() {
		return cancelButton;
	}

	public void setCancelButton(Button cancelButton) {
		this.cancelButton = cancelButton;
	}

}