/** * Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ /* * Created on Feb 1, 2005 * * @author Fabio Zadrozny */ package org.python.pydev.builder; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.python.pydev.parser.PyParserManager; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.plugin.preferences.PydevPrefs; import org.python.pydev.shared_ui.field_editors.ComboFieldEditor; import org.python.pydev.shared_ui.field_editors.LabelFieldEditor; /** * @author Fabio Zadrozny */ public class PyDevBuilderPrefPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { private final class BooleanFieldEditorWithPublicGetControl extends BooleanFieldEditor { private BooleanFieldEditorWithPublicGetControl(String name, String label, Composite parent) { super(name, label, parent); } @Override public Button getChangeControl(Composite parent) { Button checkBox = super.getChangeControl(parent); return checkBox; } } public static final boolean DEFAULT_USE_PYDEV_BUILDERS = true; public static final String USE_PYDEV_BUILDERS = "USE_PYDEV_BUILDERS"; public static final boolean DEFAULT_USE_PYDEV_ONLY_ON_DOC_SAVE = false; public static final String USE_PYDEV_ANALYSIS_ONLY_ON_DOC_SAVE = PyParserManager.USE_PYDEV_ANALYSIS_ONLY_ON_DOC_SAVE; public static final int DEFAULT_PYDEV_ELAPSE_BEFORE_ANALYSIS = 3000; public static final String PYDEV_ELAPSE_BEFORE_ANALYSIS = PyParserManager.PYDEV_ELAPSE_BEFORE_ANALYSIS; public static final String ANALYZE_ONLY_ACTIVE_EDITOR = "ANALYZE_ONLY_ACTIVE_EDITOR_2"; //Changed to _2 because we changed this behavior and the default is now true! public static final boolean DEFAULT_ANALYZE_ONLY_ACTIVE_EDITOR = true; public static final String REMOVE_ERRORS_WHEN_EDITOR_IS_CLOSED = "REMOVE_ERRORS_WHEN_EDITOR_IS_CLOSED_2"; //Changed to _2 public static final boolean DEFAULT_REMOVE_ERRORS_WHEN_EDITOR_IS_CLOSED = true; private Button onlyAnalyzeOpenCheckBox; private Button removeErrorsCheckBox; public static final String PYC_DELETE_HANDLING = "PYC_DELETE_HANDLING"; public static final int PYC_ALWAYS_DELETE = 0; public static final int PYC_DELETE_WHEN_PY_IS_DELETED = 1; public static final int PYC_NEVER_DELETE = 2; public static final int DEFAULT_PYC_DELETE_HANDLING = PYC_ALWAYS_DELETE; private static final String[][] ENTRIES_AND_VALUES = new String[][] { { "Delete any orphaned .pyc file.", Integer.toString(PYC_ALWAYS_DELETE) }, { "Only delete .pyc when .py delete is detected.", Integer.toString(PYC_DELETE_WHEN_PY_IS_DELETED) }, { "Never delete .pyc files.", Integer.toString(PYC_NEVER_DELETE) }, }; /** * @param style */ public PyDevBuilderPrefPage() { super(GRID); setPreferenceStore(PydevPlugin.getDefault().getPreferenceStore()); setDescription("PyDev builders"); } /** * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors() */ @Override protected void createFieldEditors() { Composite p = getFieldEditorParent(); String s = "WARNING: \n\n" + "PyDev builders are required for many features \n" + "provided by Pydev such as:\n" + "\n" + "- Code completion\n" + "- PyLint\n" + "- TODO tasks\n" + "\n" + "So, if you choose to disable it, note that the features \n" + "mentioned above may not work as expected or may even not \n" + "work at all (use at your own risk).\n"; addField(new LabelFieldEditor("LabelFieldEditor", s, p)); addField(new BooleanFieldEditor(USE_PYDEV_BUILDERS, "Use builders?", p)); //Analysis only on save means that we'll not have parse notifications (so, things will be analyzed only on save) addField(new BooleanFieldEditor(PyParserManager.USE_PYDEV_ANALYSIS_ONLY_ON_DOC_SAVE, "Disable parser notifications?", p)); addField(new IntegerFieldEditor(PyParserManager.PYDEV_ELAPSE_BEFORE_ANALYSIS, "Time to elapse before reparsing changed file (millis)", p)); s = "If only open editors are analyzed, markers will only be added\n" + "to the opened PyDev editors.\n"; addField(new LabelFieldEditor("ActiveBufferLabelFieldEditor", s, p)); BooleanFieldEditorWithPublicGetControl onlyAnalyzeOpen = new BooleanFieldEditorWithPublicGetControl( ANALYZE_ONLY_ACTIVE_EDITOR, "Only analyze open editors?", p); addField(onlyAnalyzeOpen); BooleanFieldEditorWithPublicGetControl removeErrors = new BooleanFieldEditorWithPublicGetControl( REMOVE_ERRORS_WHEN_EDITOR_IS_CLOSED, "Remove errors when editor is closed?", p); addField(removeErrors); removeErrorsCheckBox = removeErrors.getChangeControl(p); onlyAnalyzeOpenCheckBox = onlyAnalyzeOpen.getChangeControl(p); onlyAnalyzeOpenCheckBox.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { updateCheckEnabledState(); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); addField(new ComboFieldEditor(PYC_DELETE_HANDLING, "How to handle .pyc/$py.class deletion?", ENTRIES_AND_VALUES, p)); } /* (non-Javadoc) * @see org.eclipse.jface.preference.FieldEditorPreferencePage#dispose() */ @Override public void dispose() { super.dispose(); } @Override protected void initialize() { super.initialize(); updateCheckEnabledState(); } @Override protected void performDefaults() { super.performDefaults(); updateCheckEnabledState(); } /** * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ @Override public void init(IWorkbench workbench) { } private void updateCheckEnabledState() { if (removeErrorsCheckBox != null && !removeErrorsCheckBox.isDisposed() && onlyAnalyzeOpenCheckBox != null && !onlyAnalyzeOpenCheckBox.isDisposed()) { removeErrorsCheckBox.setEnabled(onlyAnalyzeOpenCheckBox.getSelection()); } } public static boolean usePydevBuilders() { return PydevPrefs.getPreferences().getBoolean(USE_PYDEV_BUILDERS); } public static boolean useAnalysisOnlyOnDocSave() { return PyParserManager.getPyParserManager(PydevPrefs.getPreferences()).useAnalysisOnlyOnDocSave(); } public static boolean getAnalyzeOnlyActiveEditor() { return PydevPrefs.getPreferences().getBoolean(ANALYZE_ONLY_ACTIVE_EDITOR); } public static boolean getRemoveErrorsWhenEditorIsClosed() { return PydevPrefs.getPreferences().getBoolean(REMOVE_ERRORS_WHEN_EDITOR_IS_CLOSED); } public static void setAnalyzeOnlyActiveEditor(boolean b) { PydevPrefs.getPreferences().setValue(ANALYZE_ONLY_ACTIVE_EDITOR, b); } public static int getElapseMillisBeforeAnalysis() { return PyParserManager.getPyParserManager(PydevPrefs.getPreferences()).getElapseMillisBeforeAnalysis(); } public static int getPycDeleteHandling() { return PydevPrefs.getPreferences().getInt(PYC_DELETE_HANDLING); } }