Java - Eclipse-RCP - Wizards
Basis dieses Beispiels ist wieder die Beispiel-Applikation.
Der (leere) 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() { // Hier können die WizardPages hinzugefügt werden (Siehe weiter unten) } public Object getResult() { return null; // Sollte natürlich die im Wizard erstellten Daten zurückliefern } }
Der dazugehörige Handler:
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; // Muss true sein, sonst gibt's eine Exception } @Override public void removeHandlerListener(IHandlerListener handlerListener){ } }
und die angepasste 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>
Nun kann man den noch leeren Wizard bereits starten.
Um den Finish-Button in einem Wizard zu enablen, muss die Methode isPageComplete() true zurückliefern.
Soll der Button bei geöffnetem Wizard enabled/disabled werden, so muss updateButtons() aufgerufen werden. (Dies resultiert dann in einem Aufruf von isPageComplete()).
private boolean m_isPageComplete = false; /** Diese Methode enabled den Finish-Button **/ private void myMethod(){ m_isPageComplete = true; // Das Flag, welches enabled/disabled getWizard().getContainer().updateButtons(); } /** Liefert zurück, ob der Finish-Button enabled werden kann **/ @Override public boolean isPageComplete() { return m_isPageComplete; }