Implementar uma página de preferência é similar para criar uma página para um assistente. A página de preferência fornece um método createContents que cria os controles SWT representando o conteúdo da página e inclui os ouvintes para qualquer evento de interesse. A página é responsável por criar e retornar a combinação que será parente de todos os controles na página. O fragmento a seguir mostra os realces:
protected Control createContents(Composite parent) { ... //composite_textField << pai 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 << pai Composite composite_tab = createComposite(parent, 2); Label label1 = createLabel(composite_tab, MessageUtil.getString("Radio_Button_Options")); // tabForward(composite_tab); //botão de opção composto << guia composta 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 << pai 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); }
A maioria dos códigos nesse método é relacionada à criação e colocação dos controles; dessa forma, não os analisaremos aqui. A seguir encontra-se um exemplo da aparência da página correspondente:
A outra responsabilidade principal de uma página de preferência é reagir com a mensagem performOk. Normalmente, esse método atualiza e armazena as preferências do usuário e, se necessário, atualiza qualquer outro objeto de plug-in para refletir a alteração nas preferências. O método performDefaults é utilizado para restaurar as preferências a seu estado padrão quando o usuário pressiona o botão Restaurar Padrões.
É possível substituir performApply se você tiver processamento adicional quando o usuário selecionar Aplicar. A implementação padrão é chamar performOk.
As páginas de preferência devem substituir o método doGetPreferenceStore() para retornar um armazenamento de preferência para guardar seus valores.
Os armazenamentos de preferência são similares na natureza das definições do diálogo. Na Definições de diálogo, vimos como a classe AbstractUIPlugin mantém as definições do diálogo durante o tempo de vida de um plug-in. A mesma estratégia é empregada para preferências do usuário. O plug-in pode incluir entradas para um armazenamento de preferências e atualizar os valores como o usuário altera as definições na página preferências. A plataforma cuidará de salvar esses valores no diretório de funcionamento do plug-in e de inicializar o armazenamento de preferência a partir das definições salvas.
O código a seguir na ReadmePreferencePage obtém o armazenamento de preferência para oReadmePlugin.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
Devido a ReadmePlugin estender a classe AbstractUIPlugin, ele herda automaticamente um armazenamento de preferência. Esse armazenamento de preferência é inicializado a partir de um arquivo de preferência armazenado no diretório do plug-in. A única coisa que ReadmePlugin tem que fazer é implementar um método que inicialize os controles de preferência para seus valores padrão. Esses valores são utilizados na primeira vez em que a página de preferência é exibida ou quando o usuário pressiona o botão Padrões na página preferências.
protected void initializeDefaultPreferences(IPreferenceStore store) { // Estas definições mostrarão quando o diálogo Preferências // será aberto pela primeira vez. 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$ }
Nota: se não houver preferências salvas para um plug-in, o plug-in obterá um armazenamento de preferência vazia.
Assim que tiver associado o armazenamento de preferência de plug-in com sua página de preferência, é possível implementar a lógica para recuperar e salvar preferências.
As páginas de preferência são responsáveis por inicializar os valores de seus controles utilizando as definições de preferências do armazenamento de preferência. Esse processo é similar à inicialização dos valores de controle do diálogo a partir das definições do diálogo. O ReadmePreferencePage inicializa todos seus controles em um método simples, initializeValues, que é chamado a partir do seu método 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)); ... }
Quando o botão OK (ou Aplicar) for pressionado, os valores atuais dos controles na página de preferência deveriam ser armazenados de volta no armazenamento da preferência. O ReadmePreferencePage implementa essa lógica em um método separado, 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()); ... }
Quando o usuário pressionar o botão Padrões, a plataforma restaurará todos os valores armazenados de preferência para os valores padrão especificados na classe de plug-in. Entretanto, sua página de preferência é responsável por refletir esses valores padrão nos controles na página de preferência. O ReadmePreferencePage implementa isso em 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)); ... }