package org.openembedded.bc.ui.wizards; import java.util.Map; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; public abstract class FiniteStateWizardPage extends WizardPage { protected Map model = null; protected FiniteStateWizard wizard = null; private static boolean previousState = false; /** * @param pageName */ protected FiniteStateWizardPage(String name, Map model) { super(name); this.model = model; this.setPageComplete(false); } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public abstract void createControl(Composite parent); protected void setModelWizard() { if (wizard == null) { wizard = (FiniteStateWizard)FiniteStateWizardPage.this.getWizard(); } } /** * Add page validation logic here. Returning true means that * the page is complete and the user can go to the next page. * * @return */ protected abstract boolean validatePage(); /** * This method should be implemented by ModelWizardPage classes. This method * is called after the validatePage() returns successfully. * Update the model with the contents of the controls on the page. */ protected abstract void updateModel(); /** * Helper method to see if a field has some sort of text in it. * @param value * @return */ protected boolean hasContents(String value) { if (value == null || value.length() == 0) { return false; } return true; } /** * This method is called right before a page is displayed. * This occurs on user action (Next/Back buttons). */ public abstract void pageDisplay(); /** * This method is called on the concrete WizardPage after the user has * gone to the page after. */ public abstract void pageCleanup(); /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean) */ public void setVisible(boolean arg0) { if (!arg0 && previousState) { pageCleanup(); } else if (arg0 && !previousState) { pageDisplay(); } else if (arg0 && previousState) { pageDisplay(); } previousState = arg0; super.setVisible(arg0); } public class ValidationListener implements SelectionListener, ModifyListener, Listener, ISelectionChangedListener { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { validate(); } /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetDefaultSelected(SelectionEvent e) { } /* * (non-Javadoc) * * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { validate(); } public void validate() { if (validatePage()) { updateModel(); setPageComplete(true); return; } setPageComplete(false); } /* (non-Javadoc) * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) */ public void handleEvent(Event event) { validate(); } public void selectionChanged(SelectionChangedEvent event) { validate(); } } }