JFace 플러그인은 마법사, 환경 설정 페이지 및 대화 상자 구현을 위한 프레임워크를 제공합니다. 이들 대화 상자에 대한 구현은 공통 패턴을 따릅니다. 페이지 또는 대화 상자의 컨텐츠는 페이지 컨텐츠를 표시하는 SWT 제어를 작성하는 createContents 메소드를 구현하여 정의됩니다. 이 메소드는 또한 관심있는 모든 이벤트에 대한 리스너를 추가해야 합니다. 이 페이지가 페이지의 모든 제어를 상위로 할 컴포지트를 작성 및 리턴하는 역할을 합니다. 다음 스니펫은 강조를 표시합니다.
protected Control createContents(Composite parent) { ... //composite_textField << parent Composite composite_textField = createComposite(parent, 2); Label label_textField = createLabel(composite_textField, MessageUtil.getString("Text_Field")); textField = createTextField(composite_textField); pushButton_textField = createPushButton(composite_textField, MessageUtil.getString("Change")); //composite_tab << parent Composite composite_tab = createComposite(parent, 2); Label label1 = createLabel(composite_tab, MessageUtil.getString("Radio_Button_Options")); // tabForward(composite_tab); //radio button composite << tab composite Composite composite_radioButton = createComposite(composite_tab, 1); radioButton1 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_1")); radioButton2 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_2")); radioButton3 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_3")); //composite_tab2 << parent Composite composite_tab2 = createComposite(parent, 2); Label label2 = createLabel(composite_tab2, MessageUtil.getString("Check_Box_Options")); //$NON-NLS-1$ // tabForward(composite_tab2); //composite_checkBox << composite_tab2 Composite composite_checkBox = createComposite(composite_tab2, 1); checkBox1 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_1")); checkBox2 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_2")); checkBox3 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_3")); initializeValues(); return new Composite(parent, SWT.NULL); }
이 메소드에서 대부분의 코드는 제어를 작성하여 레이아웃하는 역할을 하므로 여기서는 이에 대해서는 설명하지 않습니다. 해당 페이지는 다음과 같습니다.
환경 설정 페이지의 다른 주요 역할은 performOk 메시지에 반응하는 것입니다. 일반적으로 이 메소드는 사용자 환경 설정을 갱신하여 저장하며, 필요하면 다른 플러그인 오브젝트를 갱신하여 환경 설정 변경사항을 반영합니다. performDefaults 메소드는 사용자가 기본값 복원 단추를 누를 때 환경 설정을 기본값 상태로 복원하는 데 사용됩니다.
적용 선택 시 추가적 처리가 있으면 performApply를 대체할 수 있습니다. 기본 구현은 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, MessageUtil.getString("Default_text")); //$NON-NLS-1$ }
참고: 플러그인에 대해 어디에도 저장된 환경 설정이 없는 경우, 플러그인의 환경 설정 저장은 비어있게 됩니다.
플러그인의 환경 설정을 환경 설정 페이지와 연관시켰으면 환경 설정을 검색하고 저장하기 위한 논리를 구현할 수 있습니다.
환경 설정 페이지는 환경 설정 저장의 환경 설정을 사용하여 제어 값을 초기화하는 역할을 합니다. 이 프로세스는 대화 상자 설정에서 대화 상자 제어값을 초기화하는 것과 유사합니다. 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)); ... }