Workbench´Â Ç÷¯±×ÀÎÀÌ »ç¿ëÀÚ È¯°æ ¼³Á¤ °ªÀ» ÀúÀåÇϰí Workbench ȯ°æ ¼³Á¤ ´ëÈ »óÀÚ¿¡ ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ Á¦°øÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ÀÏ¹Ý È¯°æ ¼³Á¤ ¾ÆÅ°ÅØÃ³¸¦ ±¸ÇöÇÕ´Ï´Ù. Readme µµ±¸ ¿¹¿¡¼ À̰ÍÀÌ ¼öÇàµÇ´Â ¹æ¹ýÀ» ´Ù½Ã »ìÆì º¸°í ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ ºôµåÇϱâ À§ÇÑ ¸î °¡Áö ±âº» Áö¿øÀ» »ìÆì º¸°Ú½À´Ï´Ù.
org.eclipse.ui.preferencePages È®ÀåÁ¡À» »ç¿ëÇϸé Workbench ȯ°æ ¼³Á¤(â->ȯ°æ ¼³Á¤) ´ëÈ »óÀÚ¿¡ ÆäÀÌÁö¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ȯ°æ ¼³Á¤ ´ëÈ »óÀÚ´Â »ç¿ëÀÚ È¯°æ ¼³Á¤ Ç׸ñ¿¡ ´ëÇÑ °èÃþ ±¸Á¶ ¸ñ·ÏÀ» Á¦°øÇÕ´Ï´Ù. °¢ Ç׸ñÀ» ¼±ÅÃÇϸé ÇØ´ç ȯ°æ ¼³Á¤ ÆäÀÌÁö°¡ Ç¥½ÃµË´Ï´Ù.
Readme µµ±¸´Â ÀÌ È®ÀåÁ¡ Á¤ÀǸ¦ »ç¿ëÇÏ¿© Readme Example ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ Ãß°¡ÇÕ´Ï´Ù.
<extension
point = "org.eclipse.ui.preferencePages">
<page
id="org.eclipse.ui.examples.readmetool.Page1"
class="org.eclipse.ui.examples.readmetool.ReadmePreferencePage"
name="Readme Example">
</page>
</extension>
ÀÌ ¸¶Å©¾÷Àº ReadmePreferencePage Ŭ·¡½º¿¡ ÀÇÇØ ±¸ÇöµÇ´Â "Readme Example"À̶ó´Â ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ Á¤ÀÇÇÕ´Ï´Ù. ÀÌ Å¬·¡½º´Â IWorkbenchPreferencePage ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.
Workbench´Â PreferenceManager¸¦ »ç¿ëÇÏ¿© ȯ°æ ¼³Á¤ Æ®¸® ¹× ÇØ´ç ÆäÀÌÁö¿¡ ¸ðµç ³ëµå ¸ñ·ÏÀ» º¸°üÇÕ´Ï´Ù. Ç÷¯±×ÀÎ Äڵ带 ½ÇÇàÇÏÁö ¾Ê°í Ç÷¯±×ÀÎ ·¹Áö½ºÆ®¸®ÀÇ Á¤º¸·ÎºÎÅÍ ÀÌ ¸ñ·ÏÀ» ÃʱâÈÇÒ ¼ö ÀÖ½À´Ï´Ù. ȯ°æ ¼³Á¤ ´ëÈ »óÀÚ¿¡ ´ëÇÑ Ç÷¯±×ÀÎÀÇ Áö½Ã¹®(¿ÞÂÊÀÇ "Readme Example" Ç׸ñ)Àº Äڵ尡 ½ÇÇàµÇ±â Àü¿¡ Ç¥½ÃµË´Ï´Ù.
"Readme Example" ȯ°æ ¼³Á¤Àº ¿ÞÂÊ¿¡ Àִ ȯ°æ ¼³Á¤ Æ®¸®ÀÇ ¸Ç À§ ·¹º§¿¡ Ãß°¡µË´Ï´Ù. ±× ÀÌÀ¯´Â ȯ°æ ¼³Á¤ ÆäÀÌÁö Áö½Ã¹®ÀÌ Ä«Å×°í¸® ¼Ó¼ºÀÌ ÁöÁ¤µÈ °æ¿ì¸¦ Á¦¿ÜÇÏ°í Æ®¸®ÀÇ ·çÆ®·Î Ãß°¡µÇ±â ¶§¹®ÀÔ´Ï´Ù. (Ä«Å×°í¸®¶ó´Â À̸§Àº ´Ù¼Ò ¿ÀÇØÇϱ⠽±½À´Ï´Ù. °æ·Î°¡ ´õ ÀûÇÕÇÑ À̸§ÀÔ´Ï´Ù.) Ä«Å×°í¸® ¼Ó¼ºÀº »óÀ§ ÆäÀÌÁöÀÇ ID(¶Ç´Â ·çÆ®¿¡¼ IDÀÇ ¼ø¼)¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ¸¶Å©¾÷Àº "Readme Example Child Page"¶ó´Â µÎ ¹øÂ° Readme µµ±¸ ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ ¿ø·¡ ÆäÀÌÁöÀÇ ÇÏÀ§ ÆäÀÌÁö·Î ÀÛ¼ºÇÕ´Ï´Ù.
<extension
point = "org.eclipse.ui.preferencePages">
<page
id="org.eclipse.ui.examples.readmetool.Page1"
class="org.eclipse.ui.examples.readmetool.ReadmePreferencePage"
name="Readme Example">
</page>
<page
id="org.eclipse.ui.examples.readmetool.Page2"
class="org.eclipse.ui.examples.readmetool.ReadmePreferencePage2"
name="Readme Example Child
Page"
category="org.eclipse.ui.examples.readmetool.Page1>
</page>
</extension>
»ç¿ëÀÚ°¡ ¿ÞÂÊÀÇ Æ®¸®¿¡¼ ȯ°æ ¼³Á¤ ÆäÀÌÁö¿¡ Ç׸ñÀ» ¼±ÅÃÇϸé Workbench°¡ È®Àå Á¤ÀÇ¿¡ ÁöÁ¤µÈ Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ ÀÛ¼ºÇÏ¿© Ç¥½ÃÇÕ´Ï´Ù. ÀÌ Á¶Ä¡´Â Ç÷¯±×ÀÎÀ» Ȱ¼ºÈ(´Ù¸¥ »ç¿ëÀÚ Á¶ÀÛÀ¸·Î ÀÎÇØ ¾ÆÁ÷ Ȱ¼ºÈµÇÁö ¾ÊÀº °æ¿ì)ÇÕ´Ï´Ù.
ȯ°æ ¼³Á¤ ÆäÀÌÁöÀÇ ±¸ÇöÀº ¸¶¹ý»ç ÆäÀÌÁö ÀÛ¼º°ú À¯»çÇÕ´Ï´Ù. ȯ°æ ¼³Á¤ ÆäÀÌÁö´Â ÆäÀÌÁö ÄÁÅÙÃ÷¸¦ Ç¥½ÃÇÏ´Â SWT Á¦¾î¸¦ ÀÛ¼ºÇÏ°í °ü½É ÀÖ´Â À̺¥Æ®¿¡ ¸®½º³Ê¸¦ Ãß°¡ÇÏ´Â createContents ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù. ¶ÇÇÑ È¯°æ ¼³Á¤ ÆäÀÌÁö´Â ÆäÀÌÁöÀÇ ¸ðµç Á¦¾î¸¦ »óÀ§·Î ÇÒ º¹ÇÕÀ» ÀÛ¼ºÇÏ¿© ¸®ÅÏÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ´ÙÀ½ ½º´ÏÆêÀº °Á¶¸¦ Ç¥½ÃÇÕ´Ï´Ù.
protected Control createContents(Composite parent)
{
...
//composite_textField << parent
Composite composite_textField = createComposite(parent, 2);
Label label_textField = createLabel(composite_textField, "Text Field");
textField = createTextField(composite_textField);
pushButton_textField = createPushButton(composite_textField, "Change");
//composite_tab << parent
Composite composite_tab = createComposite(parent, 2);
Label label1 = createLabel(composite_tab, "Radio Button Options");
tabForward(composite_tab);
//´ÜÀÏ ¼±Åà ´ÜÃß º¹ÇÕ << ÅÇ º¹ÇÕ
Composite composite_radioButton = createComposite(composite_tab, 1);
radioButton1 = createRadioButton(composite_radioButton, "Radio button 1");
radioButton2 = createRadioButton(composite_radioButton, "Radio button 2");
radioButton3 = createRadioButton(composite_radioButton, "Radio button 3");
...
initializeValues();
...
return new Composite(parent, SWT.NULL);
}
ÀÌ ¸Þ¼Òµå¿¡¼ ´ëºÎºÐÀÇ ÄÚµå´Â Á¦¾î¸¦ ÀÛ¼ºÇÏ¿© ·¹À̾ƿôÇÏ´Â ¿ªÇÒÀ» ÇϹǷΠ¿©±â¼´Â ÀÌ¿¡ ´ëÇØ¼´Â ¼³¸íÇÏÁö ¾Ê½À´Ï´Ù. ÇØ´ç ÆäÀÌÁö´Â ´ÙÀ½°ú °°½À´Ï´Ù.
ȯ°æ ¼³Á¤ ÆäÀÌÁöÀÇ ´Ù¸¥ ÁÖ¿ä ¿ªÇÒÀº performOk ¸Þ½ÃÁö¿¡ ¹ÝÀÀÇÏ´Â °ÍÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀÌ ¸Þ¼Òµå´Â »ç¿ëÀÚ È¯°æ ¼³Á¤À» °»½ÅÇÏ¿© ÀúÀåÇϸç, ÇÊ¿äÇÏ¸é ´Ù¸¥ Ç÷¯±×ÀÎ ¿ÀºêÁ§Æ®¸¦ °»½ÅÇÏ¿© ȯ°æ ¼³Á¤ º¯°æ»çÇ×À» ¹Ý¿µÇÕ´Ï´Ù.
ȯ°æ ¼³Á¤ ÆäÀÌÁö´Â doGetPreferenceStore() ¸Þ¼Òµå¸¦ ´ëüÇÏ¿© °ªÀ» ÀúÀåÇϱâ À§ÇØ È¯°æ ¼³Á¤ ÀúÀåÀ» ¸®ÅÏÇØ¾ß ÇÕ´Ï´Ù.
ȯ°æ ¼³Á¤ ÀúÀåÀº º»ÁúÀûÀ¸·Î ´ëÈ »óÀÚ ¼³Á¤°ú À¯»çÇÕ´Ï´Ù. ´ëÈ »óÀÚ ¼³Á¤¿¡¼ AbstractUIPlugin Ŭ·¡½º°¡ Ç÷¯±×ÀÎ Áö¼Ó½Ã°£ µ¿¾È ´ëÈ »óÀÚ ¼³Á¤À» À¯Áöº¸¼öÇÏ´Â ¹æ¹ýÀ» »ìÆì º¸¾Ò½À´Ï´Ù. »ç¿ëÀÚ È¯°æ ¼³Á¤¿¡µµ µ¿ÀÏÇÑ °èȹÀÌ »ç¿ëµË´Ï´Ù. Ç÷¯±×ÀÎÀº ȯ°æ ¼³Á¤ ÀúÀå¿¡ Ç׸ñÀ» Ãß°¡ÇÏ°í »ç¿ëÀÚ°¡ ȯ°æ ¼³Á¤ ÆäÀÌÁö¿¡¼ ¼³Á¤À» º¯°æÇÒ ¶§ °ªÀ» °»½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. Ç÷§ÆûÀº Ç÷¯±×ÀÎÀÇ ÀÛ¾÷ µð·ºÅ丮¿¡ ÀÌ °ªÀ» ÀúÀåÇϰí ÀúÀåµÈ ¼³Á¤¿¡¼ ȯ°æ ¼³Á¤ ÀúÀåÀ» ÃʱâÈÇÕ´Ï´Ù.
ReadmePreferencePageÀÇ ´ÙÀ½ ÄÚµå´Â ReadmePlugin¿¡ ´ëÇÑ È¯°æ ¼³Á¤ ÀúÀåÀ» ¾ò½À´Ï´Ù.
protected IPreferenceStore doGetPreferenceStore() {
return ReadmePlugin.getDefault().getPreferenceStore();
}
ReadmePluginÀÌ AbstractUIPlugin Ŭ·¡½º¸¦ È®ÀåÇϱ⠶§¹®¿¡ ȯ°æ ¼³Á¤ ÀúÀåÀ» ÀÚµ¿À¸·Î »ó¼ÓÇÕ´Ï´Ù. ÀÌ È¯°æ ¼³Á¤ ÀúÀåÀº Ç÷¯±×ÀÎÀÇ µð·ºÅ丮¿¡ ÀúÀåµÈ ȯ°æ ¼³Á¤ ÆÄÀÏ¿¡¼ Ãʱâȵ˴ϴÙ. ReadmePluginÀÌ ¼öÇàÇØ¾ß ÇÒ À¯ÀÏÇÑ ÀÛ¾÷Àº ȯ°æ ¼³Á¤À» ±âº»°ªÀ¸·Î ÃʱâÈÇÏ´Â ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ °ªÀº ȯ°æ ¼³Á¤ÀÌ Ã³À½ Ç¥½ÃµÉ ¶§ ¶Ç´Â »ç¿ëÀÚ°¡ ȯ°æ ¼³Á¤ ÆäÀÌÁö¿¡¼ ±âº»°ª ´ÜÃ߸¦ ´©¸£¸é »ç¿ëµË´Ï´Ù.
protected void initializeDefaultPreferences(IPreferenceStore store) {
// These settings will show up when Preference dialog
// opens up for the first time.
store.setDefault(IReadmeConstants.PRE_CHECK1, true);
store.setDefault(IReadmeConstants.PRE_CHECK2, true);
store.setDefault(IReadmeConstants.PRE_CHECK3, false);
store.setDefault(IReadmeConstants.PRE_RADIO_CHOICE, 2);
store.setDefault(IReadmeConstants.PRE_TEXT, "Default text");
}
Âü°í: Ç÷¯±×Àο¡ ÀúÀåµÈ ȯ°æ ¼³Á¤ÀÌ ¾ø´Â °æ¿ì, Ç÷¯±×ÀÎÀº ºó ȯ°æ ¼³Á¤ ÀúÀåÀ» °¡Á®¿É´Ï´Ù.
Ç÷¯±×ÀÎÀÇ È¯°æ ¼³Á¤À» ȯ°æ ¼³Á¤ ÆäÀÌÁö¿Í ¿¬°ü½ÃÄ×À¸¸é ȯ°æ ¼³Á¤À» °Ë»öÇϰí ÀúÀåÇϱâ À§ÇÑ ³í¸®¸¦ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
ȯ°æ ¼³Á¤ ÆäÀÌÁö´Â ȯ°æ ¼³Á¤ ÀúÀåÀÇ È¯°æ ¼³Á¤À» »ç¿ëÇÏ¿© Á¦¾î °ªÀ» ÃʱâÈÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ÀÌ ÇÁ·Î¼¼½º´Â ´ëÈ »óÀÚ ¼³Á¤¿¡¼ ´ëÈ »óÀÚ Á¦¾î°ªÀ» ÃʱâÈÇÏ´Â °Í°ú À¯»çÇÕ´Ï´Ù. ReadmePreferencePage´Â ¸ðµç Á¦¾î¸¦ ÇϳªÀÇ ¸Þ¼Òµå(initializeValues)·Î ÃʱâÈÇϴµ¥, ÀÌ ¸Þ¼Òµå´Â createContents ¸Þ¼Òµå¿¡¼ È£ÃâµË´Ï´Ù.
private void initializeValues() {
IPreferenceStore store = getPreferenceStore();
checkBox1.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK1));
checkBox2.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK2));
checkBox3.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK3));
...
È®ÀÎ(¶Ç´Â Àû¿ë) ´ÜÃ߸¦ ´©¸£¸é ȯ°æ ¼³Á¤ ÆäÀÌÁöÀÇ ÇöÀç Á¦¾î°¡ ´Ù½Ã ȯ°æ ¼³Á¤ ÀúÀå¿¡ ÀúÀåµË´Ï´Ù. ReadmePreferencePage´Â ÀÌ ³í¸®¸¦ µ¶¸³ ¸Þ¼ÒµåÀÎ storeValues¿¡¼ ±¸ÇöÇÕ´Ï´Ù.
private void storeValues() {
IPreferenceStore store = getPreferenceStore();
store.setValue(IReadmeConstants.PRE_CHECK1, checkBox1.getSelection());
store.setValue(IReadmeConstants.PRE_CHECK2, checkBox2.getSelection());
store.setValue(IReadmeConstants.PRE_CHECK3, checkBox3.getSelection());
...
}
»ç¿ëÀÚ°¡ ±âº»°ª ´ÜÃ߸¦ ´©¸£¸é Ç÷§ÆûÀÌ ¸ðµç ȯ°æ ¼³Á¤ ÀúÀå °ªÀ» Ç÷¯±×ÀΠŬ·¡½º¿¡ ÁöÁ¤µÈ ±âº»°ªÀ¸·Î º¹¿øÇÕ´Ï´Ù. ±×·¯³ª ȯ°æ ¼³Á¤ ÆäÀÌÁö´Â ȯ°æ ¼³Á¤ ÆäÀÌÁöÀÇ Á¦¾î¿¡ ÀÌ ±âº»°ªÀ» ¹Ý¿µÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ReadmePreferencePage´Â À̰ÍÀ» initializeDefaults·Î ±¸ÇöÇÕ´Ï´Ù.
private void initializeDefaults() {
IPreferenceStore store = getPreferenceStore();
checkBox1.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK1));
checkBox2.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK2));
checkBox3.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK3));
...
}
ȯ°æ ¼³Á¤ ÆäÀÌÁö ±¸ÇöÀº ÁÖ·Î SWT ÄÚµåÀÔ´Ï´Ù. SWT ÄÚµå´Â ȯ°æ ¼³Á¤ ÆäÀÌÁö Á¦¾î¸¦ ÀÛ¼ºÇϰí, Á¦¾î °ªÀ» ¼³Á¤ÇÏ°í °Ë»öÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. org.eclipse.jface.preference ÆÐŰÁö´Â À§ÁöÆ®(widget)¸¦ ÀÛ¼ºÇÏ°í °ª ¼³Á¤À» ±¸ÇöÇÏ°í °¡Àå ÀϹÝÀûÀΠȯ°æ ¼³Á¤ À¯Çü Äڵ带 °Ë»öÇÏ´Â ÇÊµå ÆíÁý±â¶ó´Â ÇïÆÛ Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù. Ç÷§ÆûÀº ºÎ¿ï, »ö»ó, ¹®ÀÚ¿, Á¤¼ö, ±Û²Ã, ÆÄÀÏ À̸§À» Æ÷ÇÔÇÏ¿© ¿©·¯ °¡Áö °ªÀÇ À¯ÇüÀ» Ç¥½ÃÇÏ°í °»½ÅÇϱâ À§ÇÑ ÇÊµå ÆíÁý±â¸¦ Á¦°øÇÕ´Ï´Ù.
FieldEditorPreferencePage´Â ÀÌ ÇÊµå ÆíÁý±â¸¦ »ç¿ëÇÏ¿© ÆäÀÌÁö¿¡ ȯ°æ ¼³Á¤ °ªÀ» Ç¥½ÃÇϰí ÀúÀåÇÏ´Â ÆäÀÌÁö¸¦ ±¸ÇöÇÕ´Ï´Ù.
FieldEditorPreferencePage´Â ÄÁÅÙÃ÷¸¦ ä¿ì±â À§ÇØ SWT Á¦¾î¸¦ ÀÛ¼ºÇÏ´Â ´ë½Å ÇÊµå ÆíÁý±â¸¦ ÀÛ¼ºÇÏ¿© ÄÁÅÙÃ÷¸¦ Ç¥½ÃÇÕ´Ï´Ù.
public void createFieldEditors() {
// The first string is the preference key name
// The second string is the label shown next to the widget
addField(new BooleanFieldEditor(USE_OLD_MODE, "Use old mode",
getFieldEditorParent()));
addField(new StringFieldEditor(APPLICATION_NAME, "Application Name",
getFieldEditorParent()));
addField(new ColorFieldEditor(COLOR, "Text Color",
getFieldEditorParent()));
...
°¢ ÇÊµå ÆíÁý±â¿¡´Â ´ëÀÀÇϴ ȯ°æ ¼³Á¤ ŰÀÇ À̸§°ú ÇÊµå ÆíÁý±â°¡ ÀÛ¼ºÇÒ SWT Á¦¾î¿¡ ´ëÇÑ ÅØ½ºÆ® ·¹À̺íÀÌ ÁöÁ¤µË´Ï´Ù. ÀÛ¼ºµÇ´Â Á¦¾î À¯ÇüÀº ÇÊµå ÆíÁý±â À¯Çü¿¡ µû¶ó ´Ù¸¨´Ï´Ù. ¿¹¸¦ µé¾î, ºÎ¿ï ÇÊµå ÆíÁý±â´Â ¼±ÅöõÀ» ÀÛ¼ºÇÕ´Ï´Ù.
ȯ°æ ¼³Á¤ ÆäÀÌÁö°¡ ȯ°æ ¼³Á¤ ÀúÀå( doGetPreferenceStore ¸Þ¼Òµå¿¡ ÁöÁ¤)°ú ¿¬°üµÇ±â ¶§¹®¿¡ ÇöÀç °ªÀ» ÀúÀåÇϰí ȯ°æ ¼³Á¤ ÀúÀåÀ¸·ÎºÎÅÍ Á¦¾î °ªÀ» ÃʱâÈÇϸç Á¦¾î¸¦ ±âº»°ªÀ¸·Î º¹¿øÇϱâ À§ÇÑ Äڵ尡 ¸ðµÎ FieldEditorPreferencePage¿¡¼ ±¸ÇöµÉ ¼ö ÀÖ½À´Ï´Ù.
FieldEditorPreferencePage´Â ¿ÀÌ ÇϳªÀÎ °ÝÀÚ ·¹À̾ƿôÀ» ÇÊµå ÆíÁý±â À§ÁöÆ®(widget)¿¡ ´ëÇÑ ±âº» ·¹À̾ƿôÀ¸·Î »ç¿ëÇÕ´Ï´Ù. Ư¼ö ·¹À̾ƿô ¿ä±¸»çÇ×ÀÇ °æ¿ì, createContents ¸Þ¼Òµå¸¦ ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù.