Eclipse JFace's Wizards

前端 未结 4 1667
梦如初夏
梦如初夏 2020-12-15 23:52

I need a wizard which second page content depends on the first page\'s selection. The first page asks the user the \"kind\" of filter he wants to create and the second one a

4条回答
  •  佛祖请我去吃肉
    2020-12-16 00:08

    If you want to start a new wizard based on your selection on the first page, you can use the JFace base class org.eclipse.jface.wizard.WizardSelectionPage.

    The example below shows a list of available wizards defined by an extension point. When you press Next, the selected wizard is started.

    public class ModelSetupWizardSelectionPage extends WizardSelectionPage {
    
    private ComboViewer providerViewer;
    private IConfigurationElement selectedProvider;
    
    public ModelSetupWizardSelectionPage(String pageName) {
        super(pageName);
    }
    
    private class WizardNode implements IWizardNode {
        private IWizard wizard = null;
        private IConfigurationElement configurationElement;
    
        public WizardNode(IConfigurationElement c) {
            this.configurationElement = c;
        }
    
        @Override
        public void dispose() {
    
        }
    
        @Override
        public Point getExtent() {
            return new Point(-1, -1);
        }
    
        @Override
        public IWizard getWizard() {
            if (wizard == null) {
                try {
                    wizard = (IWizard) configurationElement
                            .createExecutableExtension("wizardClass");
                } catch (CoreException e) {
    
                }
            }
            return wizard;
        }
    
        @Override
        public boolean isContentCreated() {
            // TODO Auto-generated method stub
            return wizard != null;
        }
    
    }
    
    @Override
    public void createControl(Composite parent) {
        setTitle("Select model provider");
        Composite main = new Composite(parent, SWT.NONE);
        GridLayout gd = new GridLayout(2, false);
        main.setLayout(gd);
        new Label(main, SWT.NONE).setText("Model provider");
        Combo providerList = new Combo(main, SWT.NONE);
        providerViewer = new ComboViewer(providerList);
        providerViewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                if (element instanceof IConfigurationElement) {
                    IConfigurationElement c = (IConfigurationElement) element;
                    String result = c.getAttribute("name");
                    if (result == null || result.length() == 0) {
                        result = c.getAttribute("class");
                    }
                    return result;
                }
                return super.getText(element);
            }
    
        });
        providerViewer
                .addSelectionChangedListener(new ISelectionChangedListener() {
                    @Override
                    public void selectionChanged(SelectionChangedEvent event) {
                        ISelection selection = event.getSelection();
                        if (!selection.isEmpty()
                                && selection instanceof IStructuredSelection) {
                            Object o = ((IStructuredSelection) selection)
                                    .getFirstElement();
                            if (o instanceof IConfigurationElement) {
                                selectedProvider = (IConfigurationElement) o;
                                setMessage(selectedProvider.getAttribute("description"));
                                setSelectedNode(new WizardNode(selectedProvider));
                            }
                        }
    
                    }
                });
        providerViewer.setContentProvider(new ArrayContentProvider());
        List providers = new ArrayList();
        IExtensionRegistry registry = Platform.getExtensionRegistry();
        IExtensionPoint extensionPoint = registry
                .getExtensionPoint(,);
        if (extensionPoint != null) {
            IExtension extensions[] = extensionPoint.getExtensions();
            for (IExtension extension : extensions) {
                IConfigurationElement configurationElements[] = extension
                        .getConfigurationElements();
                for (IConfigurationElement c : configurationElements) {
                    providers.add(c);
                }
            }
        }
        providerViewer.setInput(providers);
        setControl(main);
    
    }
    

    The corresponding wizard class looks like this:

     public class ModelSetupWizard extends Wizard {
    
    private ModelSetupWizardSelectionPage wizardSelectionPage;
    
    public ModelSetupWizard() {
        setForcePreviousAndNextButtons(true);
    }
    
    @Override
    public boolean performFinish() {
                // Do what you have to do to finish the wizard
        return true;
    }
    
    @Override
    public void addPages() {
        wizardSelectionPage = new ModelSetupWizardSelectionPage("Select a wizard");
        addPage(wizardSelectionPage);
    
    }
    }
    

提交回复
热议问题