Bug 56957 [Encoding] Reusable EncodingFieldEditor
I have added the ability to set an encoding for a repository so that commit messages and file names can be properly translated between a client and server whose encodings differ. I have extracted much of the code from IDEEditorsPreferencePage into an EncodingFieldEditor class so I could us it. I was planning on providing a patch to the UI with the hope that this class could be API but there is a roadblock that prevents this. Basically, the encoding preference is in a org.eclipse.core.Preferences node but a field editor requires an IPreferenceStore. There are already two adapters for this is the platform but one is a private inner class of AbstractUIPlugin and the other lives in the text plugin. Instead of creating a patch, I'm just attaching the EncodingFieldEditor class for future consideration.
bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java
public void widgetSelected(SelectionEvent e) {
				updateEncodingState(defaultEncodingButton.getSelection());
				updateValidState();
			}
		};
		defaultEncodingButton = new Button(group, SWT.RADIO);
		String encoding = getEncoding(resource);
		String format = CONTAINER_ENCODING_FORMAT;
		String defaultEnc = null;
		if (resource instanceof IFile) {
			defaultEnc = getEncodingFromContent((IFile) resource);
			format = (defaultEnc != null) ? FILE_CONTENT_ENCODING_FORMAT
					: FILE_CONTAINER_ENCODING_FORMAT;
		}
		if (defaultEnc == null)
			defaultEnc = getEncoding(resource.getParent());
		defaultEncodingButton.setText(MessageFormat.format(format,
				new String[] { defaultEnc }));
		GridData data = new GridData();
		data.horizontalSpan = 2;
		defaultEncodingButton.setLayoutData(data);
		defaultEncodingButton.addSelectionListener(buttonListener);
		defaultEncodingButton.setFont(font);
		otherEncodingButton = new Button(group, SWT.RADIO);
		otherEncodingButton.setText(IDEWorkbenchMessages
				.getString("WorkbenchPreference.otherEncoding")); 
		otherEncodingButton.addSelectionListener(buttonListener);
		otherEncodingButton.setFont(font);
		encodingCombo = new Combo(group, SWT.NONE);
		data = new GridData();