/**
* <p>Copyright: Copyright (c) 2014</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.jres.script.util.wizard;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.widgets.Composite;
/**
* ��̬����(���ƺ�ɷ����ܲ�)
* @author liaogc
*
*/
public class DynamicPageWizard extends Wizard {
protected List<IWizardPage> pages = new ArrayList<IWizardPage>();
protected ImageDescriptor defaultImageDescriptor = JFaceResources
.getImageRegistry().getDescriptor(DEFAULT_IMAGE);
protected boolean forcePreviousAndNextButtons;
/**
* ���캯��������һ���յ���
*/
protected DynamicPageWizard() {
super();
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.wizard.Wizard#addPage(org.eclipse.jface.wizard.IWizardPage
* )
*/
public void addPage(IWizardPage page) {
pages.add(page);
page.setWizard(this);
}
/**
* ��ָ������ҳǰ������ҳ
*
* @param page
* @param nextPage
* @return
*/
public boolean addPage(IWizardPage page, IWizardPage nextPage) {
for (int i = 0; i < pages.size(); i++) {
if (pages.get(i) == nextPage) {
return addPage(page, i);
}
}
return false;
}
/**
* ��ָ����λ�ò�����ҳ
*
* @param page
* @param location
*/
public boolean addPage(IWizardPage page, int location) {
// Invalid location
if (location < 0 || location > pages.size())
return false;
// Create the new page list
List<IWizardPage> newPages = new ArrayList<IWizardPage>();
for (int i = 0; i < location; i++) {
newPages.add(pages.get(i));
}
page.setWizard(this);
newPages.add(page);
for (int i = location; i < pages.size(); i++) {
newPages.add(pages.get(i));
}
// Set the relationship
if (location != pages.size())
((IWizardPage) newPages.get(location + 1)).setPreviousPage(page);
((IWizardPage) page).setPreviousPage((IWizardPage) newPages
.get(location - 1));
pages = newPages;
return true;
}
/**
* ɾ��ָ��λ�õ���ҳ
*
* @param number
*/
public void removePage(int number) {
if (number < 0)
return;
if (number > pages.size() - 1)
return;
if (number == 0)
pages.remove(0);
else if (number == pages.size() - 1)
pages.remove(number);
else {
IWizardPage wizarPage = (IWizardPage) pages.get(number + 1);
wizarPage.setPreviousPage((IWizardPage) pages.get(number - 1));
pages.remove(number);
}
}
/**
* ɾ��ָ������ҳ
*
* @param page
*/
public void removePage(IWizardPage page) {
int number = -1;
for (int i = 0; i < pages.size(); i++) {
if (pages.get(i) == page)
number = i;
}
removePage(number);
}
/**
* ɾ������ij��������������ҳ
*
* @param number
*/
public void removePage(String className) {
for (int i = 0; i < pages.size(); i++) {
if (pages.get(i).getClass().getCanonicalName()
.equalsIgnoreCase(className))
removePage(i);
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#createPageControls
* (org.eclipse.swt.widgets.Composite)
*/
public void createPageControls(Composite pageContainer) {
// the default behavior is to create all the pages controls
for (int i = 0; i < pages.size(); i++) {
IWizardPage page = pages.get(i);
page.createControl(pageContainer);
Assert.isNotNull(page.getControl());
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#dispose()
*/
@Override
public void dispose() {
super.dispose();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getPageCount()
*/
@Override
public int getPageCount() {
return pages.size();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getPages()
*/
@Override
public IWizardPage[] getPages() {
return pages.toArray(new IWizardPage[pages.size()]);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.wizard.Wizard#getPreviousPage(org.eclipse.jface.wizard
* .IWizardPage)
*/
@Override
public IWizardPage getPreviousPage(IWizardPage page) {
int index = pages.indexOf(page);
if (index == 0 || index == -1) {
// first page or page not found
return null;
}
return pages.get(index - 1);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish() {
return true;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.wizard.Wizard#getNextPage(org.eclipse.jface.wizard.
* IWizardPage)
*/
@Override
public IWizardPage getNextPage(IWizardPage page) {
int index = pages.indexOf(page);
if (index == pages.size() - 1 || index == -1) {
// last page or page not found
return null;
}
return pages.get(index + 1);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#getStartingPage()
*/
@Override
public IWizardPage getStartingPage() {
if (pages.size() == 0) {
return null;
}
return pages.get(0);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.wizard.Wizard#needsPreviousAndNextButtons()
*/
@Override
public boolean needsPreviousAndNextButtons() {
return forcePreviousAndNextButtons || pages.size() > 1;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.wizard.Wizard#setForcePreviousAndNextButtons(boolean)
*/
@Override
public void setForcePreviousAndNextButtons(boolean b) {
forcePreviousAndNextButtons = b;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.wizard.Wizard#setDefaultPageImageDescriptor(org.eclipse
* .jface.resource.ImageDescriptor)
*/
@Override
public void setDefaultPageImageDescriptor(ImageDescriptor imageDescriptor) {
defaultImageDescriptor = imageDescriptor;
}
}