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/IDEEditorsPreferencePage.java
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();
        data.widthHint = convertWidthInCharsToPixels(15);
        encodingCombo.setFont(font);
        encodingCombo.setLayoutData(data);
        encodingCombo.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                updateValidState();
            }
        });
        List encodings = IDEEncoding.getIDEEncodings();
        
        String resourcePreference = IDEEncoding.getResourceEncoding();
        populateEncodingsCombo(encodings,resourcePreference);        
        updateEncodingState(resourcePreference == null);
    }
    /**
     * Populate the encodings combo. Set the text based on the
     * selectedEncoding. If selectedEncoding is null set it to the
     * default.
     * @param encodings