/** * Copyright (c) 2005-2011 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 May 5, 2005 * * @author Fabio Zadrozny */ package org.python.pydev.editor.autoedit; import org.python.pydev.core.IIndentPrefs; import org.python.pydev.core.cache.PyPreferencesCache; import org.python.pydev.editor.preferences.PydevEditorPrefs; import org.python.pydev.plugin.PydevPlugin; /** * Provides indentation preferences from the preferences set in the preferences pages within eclipse. */ public class DefaultIndentPrefs extends AbstractIndentPrefs { /** * Cache for indentation string */ private String indentString = null; private boolean useSpaces; private int tabWidth; private static PyPreferencesCache cache; /** * Singleton instance for the preferences */ private static IIndentPrefs indentPrefs; /** * @return the indentation preferences to be used */ public synchronized static IIndentPrefs get() { if (indentPrefs == null) { if (PydevPlugin.getDefault() == null) { return new TestIndentPrefs(true, 4); } indentPrefs = new DefaultIndentPrefs(); } return indentPrefs; } /** * @return a cache for the preferences. */ private PyPreferencesCache getCache() { if (cache == null) { cache = new PyPreferencesCache(PydevPlugin.getDefault().getPreferenceStore()); } return cache; } /** * Not singleton (each pyedit may force to use tabs or not). */ public DefaultIndentPrefs() { PyPreferencesCache c = getCache(); useSpaces = c.getBoolean(PydevEditorPrefs.SUBSTITUTE_TABS); tabWidth = c.getInt(PydevEditorPrefs.TAB_WIDTH, 4); } public boolean getUseSpaces(boolean considerForceTabs) { PyPreferencesCache c = getCache(); if (useSpaces != c.getBoolean(PydevEditorPrefs.SUBSTITUTE_TABS)) { useSpaces = c.getBoolean(PydevEditorPrefs.SUBSTITUTE_TABS); regenerateIndentString(); } if (considerForceTabs && getForceTabs()) { return false; //forcing tabs. } return useSpaces; } public void setForceTabs(boolean forceTabs) { super.setForceTabs(forceTabs); regenerateIndentString(); //When forcing tabs, we must update the cache. } public static int getStaticTabWidth() { PydevPlugin default1 = PydevPlugin.getDefault(); if (default1 == null) { return 4; } int w = default1.getPluginPreferences().getInt(PydevEditorPrefs.TAB_WIDTH); if (w <= 0) { //tab width should never be 0 or less (in this case, let's make the default 4) w = 4; } return w; } public int getTabWidth() { PyPreferencesCache c = getCache(); if (tabWidth != c.getInt(PydevEditorPrefs.TAB_WIDTH, 4)) { tabWidth = c.getInt(PydevEditorPrefs.TAB_WIDTH, 4); regenerateIndentString(); } return tabWidth; } public void regenerateIndentString() { PyPreferencesCache c = getCache(); c.clear(PydevEditorPrefs.TAB_WIDTH); c.clear(PydevEditorPrefs.SUBSTITUTE_TABS); indentString = super.getIndentationString(); } /** * This class also puts the indentation string in a cache and redoes it * if the preferences are changed. * * @return the indentation string. */ public String getIndentationString() { if (indentString == null) { regenerateIndentString(); } return indentString; } /** * @see org.python.pydev.core.IIndentPrefs#getAutoParentesis() */ public boolean getAutoParentesis() { return getCache().getBoolean(PydevEditorPrefs.AUTO_PAR); } public boolean getAutoLink() { return getCache().getBoolean(PydevEditorPrefs.AUTO_LINK); } public boolean getIndentToParLevel() { return getCache().getBoolean(PydevEditorPrefs.AUTO_INDENT_TO_PAR_LEVEL); } public boolean getAutoColon() { return getCache().getBoolean(PydevEditorPrefs.AUTO_COLON); } public boolean getAutoBraces() { return getCache().getBoolean(PydevEditorPrefs.AUTO_BRACES); } public boolean getAutoWriteImport() { return getCache().getBoolean(PydevEditorPrefs.AUTO_WRITE_IMPORT_STR); } public boolean getSmartIndentPar() { return getCache().getBoolean(PydevEditorPrefs.SMART_INDENT_PAR); } public boolean getAutoAddSelf() { return getCache().getBoolean(PydevEditorPrefs.AUTO_ADD_SELF); } public boolean getAutoDedentElse() { return getCache().getBoolean(PydevEditorPrefs.AUTO_DEDENT_ELSE); } public int getIndentAfterParWidth() { return getCache().getInt(PydevEditorPrefs.AUTO_INDENT_AFTER_PAR_WIDTH, 1); } public boolean getSmartLineMove() { return getCache().getBoolean(PydevEditorPrefs.SMART_LINE_MOVE); } public boolean getAutoLiterals() { return getCache().getBoolean(PydevEditorPrefs.AUTO_LITERALS); } }