Wizard
History
revision | changes | author |
---|---|---|
0.1 | initial version | Darren Ha |
Wizard
Wizard 클래스에서 상속받아서 클래스를 만든다.
IImportWizard interface를 implement하는 이유는 eclipse의 import 메뉴에 사용하기 위해서 이다. 내부 구현을 보면 IImportWizard, IExportWizard, INewWizard 모두 같은 interface이고 단지 이름만 다르다. 따라서, IImportWizard를 implement한 클래스도 new project 혹은 export wizard에서 사용될 수 있다.
public class MyWizard extends Wizard implements IImportWizard { @Override public void init(IWorkbench workbench, IStructuredSelection selection) { } @Override public void addPages() { MainPage main = new MainPage(); addPage(main); } @Override public boolean performFinish() { // TODO Auto-generated method stub return false; } }
Wizard Page
MyWizard::addPages에서 추가될 page는 WizardPage를 상속받아서 만들고, Dialog와 마찬가지로 createControl에서 dialog를 구성해주면 된다.
public class MainPage extends WizardPage { public MainPage() { super("main"); } @Override public void createControl(Composite parent) { Label l = new Label(parent, SWT.NONE); l.setText("test"); setControl(l); } }
Validating each page's input
WizardPage::setPageComplete()로 해당 페이지의 input이 조건에 맞게 들어왔는지 검사해서 next 버튼을 enable할지 여부를 판단한다.
SetMessage 함수로 여러가지 메세지를 wizard 헤더 영역에 나타낼 수 있다.
아래는 Text control에 제대로 된 비밀번호를 입력했을때만 finish 버튼을 enable하는 부분임.
protected void updatePageComplete() { setMessage(null); setPageComplete(false); String pwd = fText.getText(); if (!pwd.equals(PASSWORD)) { setMessage(MSG, ERROR); return; } setPageComplete(true); }
Launching Wizard
Wizard Extension Points
eclipse의 File>New/Import/Export에 나타나게 하려면 eclipse가 제공하는 wizard extension point를 추가해야 한다.
Eclipse의 plugin.xml editor에서 extension tab으로 이동한 후 아래 extension중 하나를 추가.
new project -> org.eclipse.ui.newWizards
import -> org.eclipse.ui.importWizards
export -> org.eclipse.ui.exportWizards
추가한 extension point의 하위에 context menu를 이용하여 wizard 를 추가. class 를 실제 구현한 클래스의 이름을 추가하여 매핑해준다.
Using WizardDialog
WizardDialog를 이용해서 언제든 Programatically wizard를 띄울 수 있다. 아래 처럼.
public Object execute(ExecutionEvent event) throws ExecutionException { IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); IStructuredSelection selection = StructuredSelection.EMPTY; ISelection sel = HandlerUtil.getCurrentSelection(event); if (sel instanceof IStructuredSelection) { selection = (IStructuredSelection)sel; } MyWizard wizard = new MyWizard(); wizard.init(window.getWorkbench(), selection); WizardDialog dialog = new WizardDialog(window.getShell(), wizard); dialog.open(); return null; }
Tutorial Project
https://github.com/nberserk/eclipsetutorials 에 가시면 위에서 언급된 소스가 모두 포함된 eclipse project가 있습니다.
댓글 없음:
댓글 쓰기