org.eclipse.ui.newWizards È®ÀåÁ¡À» »ç¿ëÇÏ¿© WorkbenchÀÇ ÆÄÀÏ->½Å±Ô ¸Þ´º ¿É¼Ç¿¡ ¸¶¹ý»ç¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. Readme µµ±¸ ¿¹´Â ÀÌ È®ÀåÁ¡ Á¤ÀǸ¦ »ç¿ëÇÏ¿© Readme ÆÄÀÏ ¸¶¹ý»ç¸¦ Ãß°¡ÇÕ´Ï´Ù.
<extension
point = "org.eclipse.ui.newWizards">
<category
id = "org.eclipse.ui.examples.readmetool.new"
name="Example Creation Wizards">
</category>
<wizard
id = "org.eclipse.ui.examples.readmetool.wizards.new.file"
name = "Readme File"
class="org.eclipse.ui.examples.readmetool.ReadmeCreationWizard"
category="org.eclipse.ui.examples.readmetool.new"
icon="icons/basic/obj16/newreadme_wiz.gif">
<description>An example of a wizard that creates sample Readme
file
</description>
<selection class="org.eclipse.core.resources.IResource"/>
</wizard>
</extension>
Ä«Å×°í¸®´Â ¸¶¹ý»ç ¼±ÅûçÇ× ´ëÈ »óÀÚ¸¦ »ç¿ëÇÏ¿© ¸¶¹ý»ç¸¦ ã¾Æ ½ÇÇàÇÒ ¶§ ¸¶¹ý»ç°¡ ±×·ì鵃 À§Ä¡¸¦ ¼³¸íÇÕ´Ï´Ù. Ä«Å×°í¸® À̸§("¸¶¹ý»ç ÀÛ¼º ¿¹")Àº ¸¶¹ý»ç¿¡¼ »ç¿ëµÇ´Â ·¹À̺íÀ» Á¤ÀÇÇÕ´Ï´Ù. ¸¶¹ý»ç ÀÚü´Â Ä«Å×°í¸®¿¡ ÁöÁ¤µË´Ï´Ù. À̸§, ¾ÆÀÌÄÜ, ¼³¸íÀº ¾Æ·¡ Ç¥½ÃµÈ »õ ¸¶¹ý»ç ¼±ÅûçÇ× ´ëÈ »óÀÚ¿¡ ¸ðµÎ Ç¥½ÃµË´Ï´Ù.
¸ðµÎ ¸¶Å©¾÷À» ±â¹ÝÀ¸·Î plugin.xml ÆÄÀÏ¿¡ Ç¥½ÃµË´Ï´Ù. »ç¿ëÀÚ°¡ ´ÙÀ½ ´ÜÃ߸¦ ¼±ÅÃÇÒ ¶§±îÁö ¾î¶² Ç÷¯±×ÀÎ Äڵ嵵 ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ÀÌ·± »óȲÀÌ ¹ß»ýÇϸé Workbench°¡ ¸¶Å©¾÷¿¡ ÁöÁ¤µÈ ¸¶¹ý»ç Ŭ·¡½º¸¦ ÀνºÅϽºÈÇÏ¿© ¿¹»óµÈ ¼±ÅûçÇ× Å¬·¡½º·Î Àü´ÞÇÕ´Ï´Ù.
ÀÌ È®ÀåÀ¸·Î ½Äº°µÈ Ŭ·¡½º(ReadmeCreationWizard)´Â INewWizard ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ ¸¶¹ý»ç´Â Ç÷§Æû Wizard Ŭ·¡½º¸¦ È®ÀåÇÏ¿© À̸¦ ±¸ÇöÇÏÁö¸¸, À̰ÍÀº ±¸Çö ¸ÞÄ¿´ÏÁòÀ̸ç È®ÀåÁ¡¿¡ ÇÊ¿äÇÏÁö´Â ¾Ê½À´Ï´Ù.
¸¶¹ý»ç ÀÚü´Â ´ëü·Î ¸¶¹ý»ç ³»¿¡ ÆäÀÌÁö¸¦ ÀÛ¼ºÇÏ´Â ÀÛ¾÷¸¸À» ¼öÇàÇÕ´Ï´Ù. ¸ÕÀú ÆäÀÌÁö ±¸ÇöÀ» »ìÆìº» ´ÙÀ½ ´Ù½Ã ¸¶¹ý»ç¸¦ »ìÆì º¸°Ú½À´Ï´Ù.
Workbench´Â °¢ ¸¶¹ý»ç È®ÀåÁ¡¿¡ ¼öÇàµÇ´Â ó¸® À¯ÇüÀ» Áö¿øÇÏ´Â ±âº» ¸¶¹ý»ç ÆäÀÌÁö Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌ ÆäÀÌÁö¸¦ »ç¿ëÇϰųª È®ÀåÇÏ¿© 󸮸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ReadmeCreationWizardÀÇ ¸ñÀûÀº »õ ÆÄÀÏÀ» ÀÛ¼ºÇϰí Çʼö ÄÁÅÙÃ÷¸¦ ÆÄÀÏ¿¡ Ãß°¡ÇÏ´Â °ÍÀ̸ç, ¼±ÅÃÀûÀ¸·Î ÆÄÀÏ¿¡¼ ÆíÁý±â¸¦ ¿ ¼öµµ ÀÖ½À´Ï´Ù. ÆäÀÌÁö¿¡´Â »ç¿ëÀÚ°¡ ÆÄÀÏ¿¡ Æ÷Ç﵃ ÄÁÅÙÃ÷¸¦ ÁöÁ¤ÇÏ°í ÆíÁý±â ½ÇÇà ¿©ºÎ¸¦ ÁöÁ¤Çϵµ·Ï Á¦¾î°¡ Á¤ÀǵǾî¾ß ÇÕ´Ï´Ù.
WizardNewFileCreationPage¸¦ È®ÀåÇÏ¿© CreateReadmePage1 ¸¶¹ý»ç ÆäÀÌÁö¸¦ ÀÛ¼ºÇϵµ·Ï ÇϰڽÀ´Ï´Ù. ¸¶¹ý»ç ÆäÀÌÁö¿¡ ´ëÇÑ Á¦¾î´Â º¸±â ¶Ç´Â ÆíÁý±â¿¡ ´ëÇÑ Á¦¾î Á¤ÀÇ¿Í À¯»çÇÑ ¹æ½ÄÀ¸·Î Á¤Àǵ˴ϴÙ. ÆäÀÌÁö´Â Çʼö SWT À§ÁöÆ®(widget)¸¦ Á¦°øµÈ º¹ÇÕÀÇ ÇÏÀ§·Î ÀÛ¼ºÇÏ¿© 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("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("Generate sample section titles");
sectionCheckbox.setSelection(true);
sectionCheckbox.addListener(SWT.Selection,this);
subsectionCheckbox = new Button(group,SWT.CHECK);
subsectionCheckbox.setText("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("Open file for editing when done");
openFileCheckbox.setSelection(true);
...
}
SWT(Standard Widget Toolkit)ÀÇ °³³äÀ» ÀÌÇØÇϰí ÀÖ´Ù¸é ÀÌ Äڵ带 ÁؼöÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ÆäÀÌÁö¸¦ ±¸ÇöÇÏ´Â ±âº» ÆÐÅÏÀº ´ÙÀ½°ú °°½À´Ï´Ù.
¸®½º³Ê¸¦ ÆäÀÌÁö µ¿Àû ÀÛµ¿¿¡ ¿µÇâÀ» ÁÖ´Â ¸ðµç Á¦¾î¿¡ Ãß°¡ÇϽʽÿÀ. ¿¹¸¦ µé¾î, ¸ñ·Ï¿¡¼ Ç׸ñÀ» ¼±ÅÃÇϰųª ¼±ÅöõÀ» ¼±ÅÃÇÒ ¶§ ÆäÀÌÁö ±âŸ Á¦¾î »óŰ¡ ¿µÇâÀ» ¹Þ´Â °æ¿ì, ÆäÀÌÁö »óŸ¦ º¯°æÇÒ ¼ö ÀÖµµ·Ï ¸®½º³Ê¸¦ Ãß°¡ÇϽʽÿÀ.
¸¶¹ý»ç¸¦ ½ÇÇàµÇ¸é ÇöÀç ¼±ÅûçÇ×À» ±â¹ÝÀ¸·Î Á¦¾î¸¦ µ¥ÀÌÅͷΠä¿ì½Ê½Ã¿À. ÀϺΠµ¥ÀÌÅÍ´Â ±âŸ Á¦¾î °ª¿¡ µû¶ó ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù. ÀϺΠÁ¦¾î´Â ´ëÈ »óÀÚ ¼³Á¤À» »ç¿ëÇÏ¿© °ªÀ» ÃʱâÈÇÕ´Ï´Ù.
»ç¿ëÀÚ°¡ ÃæºÐÇÑ Á¤º¸¸¦ Á¦°øÇϸé setPageComplete(true)¸¦ »ç¿ëÇÏ¿© ÆäÀÌÁö¸¦ Á¾·áÇÏ°í ´ÙÀ½ ÆäÀÌÁö·Î À̵¿Çϰųª ¸¶¹ý»ç¸¦ ¿Ï·áÇϽʽÿÀ.
ReadmeCreationPage Ŭ·¡½º´Â WizardNewFileCreationPage¿¡¼ ÀÌ ÀÛµ¿ÀÇ »ó´ç ºÎºÐÀ» »ó¼ÓÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â ÀÌ Å¬·¡½º¿¡ ´ëÇÑ ±¸ÇöÀ» ã¾Æº¸½Ê½Ã¿À.
ÀÌÁ¦ ÆäÀÌÁö°¡ ÇÏ´Â ¿ªÇÒÀ» ÀÌÇØÇßÀ¸¹Ç·Î ´Ù½Ã ¸¶¹ý»ç¸¦ »ìÆì º¸°Ú½À´Ï´Ù.
¸¶¹ý»ç´Â ÆäÀÌÁö¸¦ ÀÛ¼ºÇÏ¿© "¿Ï·á" ³í¸®¸¦ Á¦°øÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.
¸¶¹ý»ç¸¦ ±¸ÇöÇÏ´Â ±âº» ÆÐÅÏÀº ´ÙÀ½°ú °°½À´Ï´Ù.
init ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ¿© ÄÁÅØ½ºÆ® Á¤º¸(¿¹: Workbench ¹× ÇöÀç ¼±ÅûçÇ×)¿¡ ·ÎÄà º¯¼ö¸¦ ¼³Á¤ÇϽʽÿÀ.
public void init(IWorkbench workbench,IStructuredSelection selection) {
this.workbench = workbench;
this.selection = selection;
setWindowTitle("New Readme File");
setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER);
}
ÆäÀÌÁö ÀνºÅϽº¸¦ ÀÛ¼ºÇÏ¿© addPages¸¦ ±¸ÇöÇϽʽÿÀ.
public void addPages() {
mainPage = new ReadmeCreationPage(workbench, selection);
addPage(mainPage);
}
performFinish¸¦ ±¸ÇöÇÏ¿© Ÿ½ºÅ©¸¦ ¿Ï·áÇϽʽÿÀ.
°¢ ÆäÀÌÁö°¡ Ÿ½ºÅ© ±¸Çö ¹æ¹ýÀ» ÆÇº°ÇÏ´Â Á¤º¸¸¦ Á¦°øÇϱ⠶§¹®¿¡ º¹¼ö ÆäÀÌÁö ¸¶¹ý»ç´Â ÀϹÝÀûÀ¸·Î ¸¶¹ý»ç ÀÚü¿¡¼ ¿Ï·á ³í¸®¸¦ ó¸®ÇÕ´Ï´Ù. ´ÜÀÏ ÆäÀÌÁö ¸¶¹ý»ç´Â ¸¶¹ý»ç¿¡¼ ³í¸®¸¦ ±¸ÇöÇϰųª ÆäÀÌÁö¿¡ ÀÛ¾÷ ¿Ï·á ¿äûÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. Áß¿äÇÑ »óŰ¡ º¸°üµÇ´Â À§Ä¡¿¡ µû¶ó ÃëÇÏ´Â Á¢±Ù¹æ¹ýÀÌ Å©°Ô ´Þ¶óÁý´Ï´Ù. Readme ¸¶¹ý»çÀÇ °æ¿ì, ÆäÀÌÁö¿¡ ¿Ï·á 󸮸¦ ¼öÇàÇϵµ·Ï ¿äûÇÏ°Ô µË´Ï´Ù.
public boolean performFinish() {
return mainPage.finish();
}
¿Ï·áµÈ ¸¶¹ý»ç´Â ´ÙÀ½°ú °°ÀÌ Ç¥½ÃµË´Ï´Ù.