org.eclipse.ui.newWizards 확장점을 사용하여 Workbench의 파일->새로 작성 > 메뉴 옵션에 마법사를 추가할 수 있습니다. Readme 도구 예는 이 확장점 정의를 사용하여 Readme 파일 마법사를 추가합니다.
<extension point = "org.eclipse.ui.newWizards"> <category id = "org.eclipse.ui.examples.readmetool.new" parentCategory="org.eclipse.ui.Examples" name="%NewWizard.category"> </category> <wizard id = "org.eclipse.ui.examples.readmetool.wizards.new.file" name = "%NewWizard.name" class="org.eclipse.ui.examples.readmetool.ReadmeCreationWizard" category="org.eclipse.ui.Examples/org.eclipse.ui.examples.readmetool.new" icon="icons/obj16/newreadme_wiz.png"> <description>%NewWizard.desc</description> <selection class="org.eclipse.core.resources.IResource"/> </wizard> </extension>
카테고리에서는 마법사 그룹화를 설명합니다. 선택적 parentCategory는 기존 카테고리의 하위로 새 카테고리를 설정합니다.
맨 위 레벨 카테고리는 파일> 새로 작성 메뉴에서 나타납니다. 이 예제에서 parentCategory는 "예제" 카테고리로 설정됩니다. 상위 카테고리를 가져오는 장소는 어디입니까? org.eclipse.ui 플러그인은 해당 마크업에 표준 예제 카테고리를 정의합니다.
<extension point="org.eclipse.ui.newWizards"> <category name="%NewWizards.Category.Examples" id="org.eclipse.ui.Examples"> </category> ...
이 카테고리는 파일> 새로 작성 메뉴에서 나타납니다.
readme 도구의 카테고리 이름은 상위 카테고리 아래에 있는 다음 레이어를 그룹화하는 데 사용되는 레이블을 정의합니다. 이 카테고리는 새 예제 마법사에 표시된 트리에서 두 번째 레벨로 표시됩니다. 마법사의 이름 및 아이콘은 카테고리를 펼치면 아래에 표시됩니다. 선택된 마법사에 대한 설명은 해당 설명을 선택하면 마법사의 맨 위에 표시됩니다.
이 마법사에 대한 정보는 plugin.xml 파일의 마크업으로 인해 단독으로 표시됩니다. 사용자가 다음 단추를 선택할 때까지 어떤 플러그인 코드도 실행되지 않습니다. 이런 상황이 발생하면 Workbench가 마크업에 지정된 마법사 클래스를 인스턴스화하여 예상된 선택사항 클래스로 전달합니다.
이 확장으로 식별된 클래스(ReadmeCreationWizard)는 INewWizard 인터페이스를 구현해야 합니다. 대부분의 마법사는 플랫폼 Wizard 클래스를 확장하여 이를 구현하지만, 이것은 구현 메커니즘이며 확장점에 필요하지는 않습니다.
마법사 자체는 대체로 마법사에 페이지를 작성하는 작업만을 수행합니다. 먼저 페이지 구현을 살펴본 다음 다시 마법사를 살펴 보겠습니다.
Workbench는 각 마법사 확장점에 수행되는 처리 유형을 지원하는 기본 마법사 페이지 클래스를 제공합니다. 이 페이지를 사용하거나 확장하여 처리를 추가할 수 있습니다.
ReadmeCreationWizard의 목적은 새 파일을 작성하고 필수 컨텐츠를 파일에 추가하는 것이며, 선택적으로 파일에서 편집기를 열 수도 있습니다. 페이지에는 사용자가 파일에 포함될 컨텐츠를 지정하고 편집기 실행 여부를 지정하도록 제어가 정의되어야 합니다.
WizardNewFileCreationPage를 확장하여 ReadmeCreationPage 마법사 페이지를 작성합니다. 마법사 페이지에 대한 제어는 보기 또는 편집기에 대한 제어 정의와 유사한 방식으로 정의됩니다. 페이지는 필수 SWT 위지트(widget)를 제공된 Composite의 하위로 작성하여 createControl 메소드를 구현합니다. 수퍼클래스가 새 파일 처리를 지원하는 위지트(widget)를 미리 추가하므로 마법사 페이지에서 createControl 메소드를 확장하여 섹션 생성 및 편집기 열기를 제어하는 추가 선택란만 추가하면 됩니다.
public void createControl(Composite parent) { // inherit default container and name specification widgets super.createControl(parent); Composite composite = (Composite)getControl(); ... // sample section generation group Group group = new Group(composite,SWT.NONE); group.setLayout(new GridLayout()); group.setText(MessageUtil.getString("Automatic_sample_section_generation")); group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); ... // sample section generation checkboxes sectionCheckbox = new Button(group,SWT.CHECK); sectionCheckbox.setText(MessageUtil.getString("Generate_sample_section_titles")); sectionCheckbox.setSelection(true); sectionCheckbox.addListener(SWT.Selection,this); subsectionCheckbox = new Button(group,SWT.CHECK); subsectionCheckbox.setText(MessageUtil.getString("Generate_sample_subsection_titles")); subsectionCheckbox.setSelection(true); subsectionCheckbox.addListener(SWT.Selection,this); ... // open file for editing checkbox openFileCheckbox = new Button(composite,SWT.CHECK); openFileCheckbox.setText(MessageUtil.getString("Open_file_for_editing_when_done")); openFileCheckbox.setSelection(true); ... }
SWT(Standard Widget Toolkit)의 개념을 이해하고 있다면 이 코드를 준수할 수 있어야 합니다.
페이지를 구현하는 기본 패턴은 다음과 같습니다.
ReadmeCreationPage 클래스는 WizardNewFileCreationPage에서 이 작동의 상당 부분을 상속합니다. 자세한 정보는 이 클래스에 대한 구현을 찾아보십시오.
이제 페이지가 하는 역할을 이해했으므로 다시 마법사를 살펴 보겠습니다.
마법사는 페이지를 작성하여 "완료" 논리를 제공하는 역할을 합니다.
마법사를 구현하는 기본 패턴은 다음과 같습니다.
public void init(IWorkbench workbench,IStructuredSelection selection) { this.workbench = workbench; this.selection = selection; setWindowTitle(MessageUtil.getString("New_Readme_File")); setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER); }
public void addPages() { mainPage = new ReadmeCreationPage(workbench, selection); addPage(mainPage); }
public boolean performFinish() { return mainPage.finish(); }
완료된 마법사는 다음과 같이 표시됩니다.