Implementando uma página de preferência

Definindo a página

O plug-in JFace fornece uma estrutura para assistentes de implementação, páginas de preferência e caixas de diálogo. A implementação para essas caixas de diálogo segue um padrão comum. O conteúdo de uma página ou caixa de diálogo é definido implementando um método createContents que cria os controles de SWT que representam o conteúdo da página. Esse método também deve incluir listeners 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:

Página de Preferências da Ferramenta de Leia-me

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 preferências para o 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.

Armazenamento de preferência de plug-in

Armazenamentos de preferências são um mecanismo de conveniência para acessar e armazenar valores de preferências em uma classe de plug-in. Eles fornecem acesso em nível de plug-in para as preferências que estão realmente armazenadas utilizando o serviço de preferências do tempo de execução. AbstractUIPlugin define um armazenamento de preferências amplo de plug-in que é mantido durante o ciclo de vida do plug-in. O plug-in pode incluir entradas nesse armazenamento de preferências e atualizar os valores conforme o usuário altera as configurações na página de preferências. Como armazenamentos de preferências utilizam o serviço de preferências da plataforma, eles se encarregarão de salvar esses valores no escopo e no local apropriados e inicializar o armazenamento de preferência utilizando os mecanismos apropriados.

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 utilizando o serviço de preferências da plataforma. A única coisa que o ReadmePlugin tem que fazer é implementar um método que vinicializa os controles de preferência para os 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 em qualquer lugar para um plug-in, ele obterá um armazenamento de preferências vazio.

Recuperando e salvando preferências

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));
      ...
   }