aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/EditorsPage.java
diff options
context:
space:
mode:
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.java182
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;
+ }
+ }
+}