diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/EditorsPage.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/EditorsPage.java | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/EditorsPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/EditorsPage.java new file mode 100644 index 000000000..d33b49f6d --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/EditorsPage.java @@ -0,0 +1,182 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.adt.internal.preferences; + +import static com.android.ide.common.xml.XmlAttributeSortOrder.ALPHABETICAL; +import static com.android.ide.common.xml.XmlAttributeSortOrder.LOGICAL; +import static com.android.ide.common.xml.XmlAttributeSortOrder.NO_SORTING; + +import com.android.ide.eclipse.adt.AdtPlugin; +import com.android.sdkuilib.internal.widgets.ResolutionChooserDialog; + +import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.jface.preference.RadioGroupFieldEditor; +import org.eclipse.jface.preference.StringButtonFieldEditor; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; + +/** + * Preference page for the editors. + */ +public class EditorsPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { + private BooleanFieldEditor mIndentEditor; + private BooleanFieldEditor mRemoveEmptyEditor; + private BooleanFieldEditor mOneAttrPerLineEditor; + private BooleanFieldEditor mSpaceBeforeCloseEditor; + private BooleanFieldEditor mFormatGuiXmlEditor; + + /** + * Constructs a new Android editors preference page + */ + public EditorsPage() { + super(GRID); + setPreferenceStore(AdtPlugin.getDefault().getPreferenceStore()); + } + + @Override + public void init(IWorkbench workbench) { + // pass + } + + @Override + protected void createFieldEditors() { + Composite parent = getFieldEditorParent(); + + addField(new DensityFieldEditor(AdtPrefs.PREFS_MONITOR_DENSITY, + "Monitor Density", parent)); + + final MyBooleanFieldEditor editor = new MyBooleanFieldEditor( + AdtPrefs.PREFS_USE_CUSTOM_XML_FORMATTER, + "Format XML files using the standard Android XML style rather than the \n" + + "configured Eclipse XML style (additional options below)", + parent); + addField(editor); + + // Add a listener which fires whenever the checkbox for the custom formatter + // is toggled -- this will be used to enable/disable the formatting related options + // on the page. To do this we subclass the BooleanFieldEditor to make the protected + // method getChangeControl public (so we can access it and add a listener on it). + // This is pretty ugly but I found several posts in the Eclipse forums asking + // how to do it and they were all unanswered. (No, calling setPropertyChangeListener + // does not work.) + Button checkbox = editor.getChangeControl(parent); + checkbox.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + updateCustomFormattingOptions(editor.getBooleanValue()); + } + }); + + mIndentEditor = new BooleanFieldEditor(AdtPrefs.PREFS_USE_ECLIPSE_INDENT, + "Use Eclipse setting for indentation width and space or tab character " + + "indentation \n(Android default is 4 space characters)", + parent); + addField(mIndentEditor); + + mRemoveEmptyEditor = new BooleanFieldEditor(AdtPrefs.PREVS_REMOVE_EMPTY_LINES, + "Always remove empty lines between elements", + parent); + addField(mRemoveEmptyEditor); + + mOneAttrPerLineEditor = new BooleanFieldEditor(AdtPrefs.PREFS_ONE_ATTR_PER_LINE, + "Allow single attributes to appear on the same line as their elements", + parent); + addField(mOneAttrPerLineEditor); + + mSpaceBeforeCloseEditor = new BooleanFieldEditor(AdtPrefs.PREFS_SPACE_BEFORE_CLOSE, + "Add a space before the > or /> in opening tags", + parent); + addField(mSpaceBeforeCloseEditor); + + addField(new RadioGroupFieldEditor(AdtPrefs.PREFS_ATTRIBUTE_SORT, + "Sort Attributes", 1, + new String[][] { + { "&Logical (id, style, layout attributes, remaining attributes alphabetically)", + LOGICAL.key }, + { "&Alphabetical", ALPHABETICAL.key }, + { "&None", NO_SORTING.key }, + }, + parent, true)); + + mFormatGuiXmlEditor = new BooleanFieldEditor(AdtPrefs.PREFS_FORMAT_GUI_XML, + "Automatically format the XML edited by the visual layout editor", + parent); + addField(mFormatGuiXmlEditor); + + addField(new BooleanFieldEditor(AdtPrefs.PREFS_FORMAT_ON_SAVE, + "Format on Save", + parent)); + + addField(new BooleanFieldEditor(AdtPrefs.PREFS_SHARED_LAYOUT_EDITOR, + "Use a single layout editor for all configuration variations of a layout", + parent)); + + boolean enabled = getPreferenceStore().getBoolean(AdtPrefs.PREFS_USE_CUSTOM_XML_FORMATTER); + updateCustomFormattingOptions(enabled); + } + + private void updateCustomFormattingOptions(boolean enabled) { + Composite parent = getFieldEditorParent(); + mIndentEditor.setEnabled(enabled, parent); + mRemoveEmptyEditor.setEnabled(enabled, parent); + mOneAttrPerLineEditor.setEnabled(enabled, parent); + mSpaceBeforeCloseEditor.setEnabled(enabled, parent); + mFormatGuiXmlEditor.setEnabled(enabled, parent); + } + + /** + * Overridden solely so that I can get access to the checkbox button to listen to + * state changes + */ + private class MyBooleanFieldEditor extends BooleanFieldEditor { + public MyBooleanFieldEditor(String name, String label, Composite parent) { + super(name, label, parent); + } + @Override + protected Button getChangeControl(Composite parent) { + return super.getChangeControl(parent); + } + } + + /** + * Custom {@link StringButtonFieldEditor} to call out to {@link ResolutionChooserDialog} + * when the button is called. + */ + private static class DensityFieldEditor extends StringButtonFieldEditor { + + public DensityFieldEditor(String name, String labelText, Composite parent) { + super(name, labelText, parent); + setChangeButtonText("Compute..."); + } + + @Override + protected String changePressed() { + ResolutionChooserDialog dialog = new ResolutionChooserDialog(getShell()); + if (dialog.open() == Window.OK) { + return Integer.toString(dialog.getDensity()); + } + + return null; + } + } +} |