Java - Eclipse-RCP - Wizards
Basis of this example is the example-application.
The (empty) Wizard:
package com.sowas.javawiki.rcpbaseapplication.wizard; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; public class MyWizard extends Wizard implements INewWizard{ @Override public boolean performFinish(){ return false; } @Override public void init(IWorkbench workbench, IStructuredSelection selection){ } @Override public void addPages() { // here, the WizardPages can be added (see further down) } public Object getResult() { return null; // should deliver back the in the Wizard generated data } }
The handler which goes with it:
package com.sowas.javawiki.rcpbaseapplication.wizard; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.core.commands.IHandlerListener; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Display; public class MyWizardHandler implements IHandler{ @Override public void addHandlerListener(IHandlerListener handlerListener){ } @Override public void dispose(){ } @Override public Object execute(ExecutionEvent event) throws ExecutionException{ MyWizard myWizard = new MyWizard(); //(person); WizardDialog wizardDialog = new WizardDialog(Display.getDefault().getActiveShell(), myWizard); wizardDialog.create(); Point defaultSize = wizardDialog.getShell().getSize(); wizardDialog.getShell().setSize( Math.max(400, defaultSize.x), Math.max(600, defaultSize.y)); wizardDialog.setBlockOnOpen(true); Object result = null; if (WizardDialog.OK == wizardDialog.open()) { result = myWizard.getResult(); } return result; } @Override public boolean isEnabled(){ return true; } @Override public boolean isHandled(){ return true; // Has to be true, or else there is an exception } @Override public void removeHandlerListener(IHandlerListener handlerListener){ } }
and the conformist plugin.xml:
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.2"?> <plugin> <extension id="application" point="org.eclipse.core.runtime.applications"> <application> <run class="com.sowas.javawiki.rcpbaseapplication.Application"> </run> </application> </extension> <extension point="org.eclipse.ui.perspectives"> <perspective name="Perspective" class="com.sowas.javawiki.rcpbaseapplication.MyPerspective" id="BaseApplication.perspective"> </perspective> </extension> <extension point="org.eclipse.ui.views"> <view name="MyView" class="com.sowas.javawiki.rcpbaseapplication.MyView" id="com.sowas.javawiki.rcpbaseapplication.MyView"> </view> </extension> <extension point="org.eclipse.ui.editors"> <editor class="com.sowas.javawiki.rcpbaseapplication.MyEditor" default="false" id="com.sowas.javawiki.rcpbaseapplication.MyEditor" name="MyEditor"> </editor> </extension> <extension point="org.eclipse.ui.menus"> <menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions"> <menu label="Wizard"> <command commandId="com.sowas.javawiki.rcpbaseapplication.wizard.Wizard" style="push"> </command> </menu> </menuContribution> </extension> <extension point="org.eclipse.ui.commands"> <command defaultHandler="com.sowas.javawiki.rcpbaseapplication.wizard.MyWizardHandler" id="com.sowas.javawiki.rcpbaseapplication.wizard.Wizard" name="Start Wizard"> </command> </extension> </plugin>
Now, you can start the still empty Wizard.
To enable the Finish-Button in a Wizard, the method has to deliver back isPageComplete() true.
Shall the Button be enabled/disabled during an opened Wizard, so the updateButtons() have to be called up. (This results in a call from isPageComplete()).
private boolean m_isPageComplete = false; /** This method enabled the Finish-Button **/ private void myMethod(){ m_isPageComplete = true; // TheFlag, which enabled/disabled getWizard().getContainer().updateButtons(); } /** Delivers back, if the Finish-Button can be enabled **/ @Override public boolean isPageComplete() { return m_isPageComplete; }