/** * 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. */ package org.python.pydev.plugin.preferences; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.python.pydev.core.bundle.ImageCache; import org.python.pydev.editor.codecompletion.revisited.PythonPathHelper; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.ui.UIConstants; import org.python.pydev.utils.LabelFieldEditor; import org.python.pydev.utils.TableComboFieldEditor; public class PyTitlePreferencesPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public static final String TITLE_EDITOR_NAMES_UNIQUE = "TITLE_EDITOR_NAMES_UNIQUE"; public static final boolean DEFAULT_TITLE_EDITOR_NAMES_UNIQUE = true; public static final String TITLE_EDITOR_SHOW_EXTENSION = "TITLE_EDITOR_SHOW_EXTENSION"; public static final boolean DEFAULT_TITLE_EDITOR_SHOW_EXTENSION = false; public static final String TITLE_EDITOR_CUSTOM_INIT_ICON = "TITLE_EDITOR_CUSTOM_INIT_ICON"; public static final boolean DEFAULT_TITLE_EDITOR_CUSTOM_INIT_ICON = true; public static final String TITLE_EDITOR_INIT_HANDLING = "TITLE_EDITOR_INIT_HANDLING"; public static final String TITLE_EDITOR_INIT_HANDLING_IN_TITLE = "TITLE_EDITOR_INIT_HANDLING_IN_TITLE"; public static final String TITLE_EDITOR_INIT_HANDLING_PARENT_IN_TITLE = "TITLE_EDITOR_INIT_HANDLING_PARENT_IN_TITLE"; public static final String DEFAULT_TITLE_EDITOR_INIT_HANDLING = TITLE_EDITOR_INIT_HANDLING_PARENT_IN_TITLE; public static final String TITLE_EDITOR_DJANGO_MODULES_HANDLING = "TITLE_EDITOR_DJANGO_MODULES_HANDLING"; public static final String TITLE_EDITOR_DJANGO_MODULES_DEFAULT_ICON = "TITLE_EDITOR_DJANGO_MODULES_DEFAULT_ICON"; public static final String TITLE_EDITOR_DJANGO_MODULES_DECORATE = "TITLE_EDITOR_DJANGO_MODULES_DECORATE"; public static final String TITLE_EDITOR_DJANGO_MODULES_SHOW_PARENT_AND_DECORATE = "TITLE_EDITOR_DJANGO_MODULES_SHOW_PARENT_AND_DECORATE"; public static final String DEFAULT_TITLE_EDITOR_DJANGO_MODULES_HANDLING = TITLE_EDITOR_DJANGO_MODULES_SHOW_PARENT_AND_DECORATE; public static boolean isTitlePreferencesProperty(String property) { return PyTitlePreferencesPage.TITLE_EDITOR_INIT_HANDLING.equals(property) || PyTitlePreferencesPage.TITLE_EDITOR_NAMES_UNIQUE.equals(property) || PyTitlePreferencesPage.TITLE_EDITOR_SHOW_EXTENSION.equals(property) || PyTitlePreferencesPage.TITLE_EDITOR_CUSTOM_INIT_ICON.equals(property) || PyTitlePreferencesPage.TITLE_EDITOR_DJANGO_MODULES_HANDLING.equals(property); } public static boolean isTitlePreferencesIconRelatedProperty(String property) { return PyTitlePreferencesPage.TITLE_EDITOR_CUSTOM_INIT_ICON.equals(property) || PyTitlePreferencesPage.TITLE_EDITOR_DJANGO_MODULES_HANDLING.equals(property); } private BooleanFieldEditor editorNamesUnique; private BooleanFieldEditor changeInitIcon; private TableComboFieldEditor initHandlingFieldEditor; private BooleanFieldEditor titleShowExtension; private TableComboFieldEditor djangoHandling; public PyTitlePreferencesPage() { super(GRID); setPreferenceStore(PydevPlugin.getDefault().getPreferenceStore()); } public void init(IWorkbench workbench) { } protected void createFieldEditors() { Composite p = getFieldEditorParent(); //Unique names? editorNamesUnique = new BooleanFieldEditor(TITLE_EDITOR_NAMES_UNIQUE, "Editor name (considering icon) must be unique?", BooleanFieldEditor.SEPARATE_LABEL, p); addField(editorNamesUnique); titleShowExtension = new BooleanFieldEditor(TITLE_EDITOR_SHOW_EXTENSION, "Show file extension on tab?", BooleanFieldEditor.SEPARATE_LABEL, p); addField(titleShowExtension); //Should pydev change the init icon? changeInitIcon = new BooleanFieldEditor(TITLE_EDITOR_CUSTOM_INIT_ICON, "Use custom init icon?", BooleanFieldEditor.SEPARATE_LABEL, p); addField(changeInitIcon); Object[][] EDITOR__INIT__HANDLING_VALUES = { { "__init__.py should appear in title", TITLE_EDITOR_INIT_HANDLING_IN_TITLE, null }, { "Show parent name in title", TITLE_EDITOR_INIT_HANDLING_PARENT_IN_TITLE, null }, }; initHandlingFieldEditor = new TableComboFieldEditor(TITLE_EDITOR_INIT_HANDLING, "__init__.py handling:", EDITOR__INIT__HANDLING_VALUES, p); addField(initHandlingFieldEditor); new LabelFieldEditor("UNUSED", "Django related configurations", p); new LabelFieldEditor("UNUSED", "", p); Object[][] EDITOR_DJANGO_MODULES_HANDLING_VALUES = { { "Show as regular module", TITLE_EDITOR_DJANGO_MODULES_DEFAULT_ICON, null }, { "Show as regular module but using icon with module initial", TITLE_EDITOR_DJANGO_MODULES_DECORATE, null }, { "Show parent name in title and icon with module initial", TITLE_EDITOR_DJANGO_MODULES_SHOW_PARENT_AND_DECORATE, null }, }; djangoHandling = new TableComboFieldEditor(TITLE_EDITOR_DJANGO_MODULES_HANDLING, "Django modules handling:\n(models.py, views.py, tests.py)", EDITOR_DJANGO_MODULES_HANDLING_VALUES, p); addField(djangoHandling); } public void dispose() { super.dispose(); } public static boolean getEditorNamesUnique() { return PydevPrefs.getPreferences().getBoolean(TITLE_EDITOR_NAMES_UNIQUE); } /** * @return A constant defined in this class * EDITOR_TITLE_INIT_HANDLING_XXX * * Note that clients using this methods can compare it with == with a constant in this * class (as it will return the actual constant and not what's set in the preferences). */ public static String getInitHandling() { String initHandling = PydevPrefs.getPreferences().getString(TITLE_EDITOR_INIT_HANDLING); if (TITLE_EDITOR_INIT_HANDLING_IN_TITLE.equals(initHandling)) { return TITLE_EDITOR_INIT_HANDLING_IN_TITLE; } return TITLE_EDITOR_INIT_HANDLING_PARENT_IN_TITLE; //default } public static String getDjangoModulesHandling() { String djangoHandling = PydevPrefs.getPreferences().getString(TITLE_EDITOR_DJANGO_MODULES_HANDLING); if (TITLE_EDITOR_DJANGO_MODULES_DEFAULT_ICON.equals(djangoHandling)) { return TITLE_EDITOR_DJANGO_MODULES_DEFAULT_ICON; } if (TITLE_EDITOR_DJANGO_MODULES_DECORATE.equals(djangoHandling)) { return TITLE_EDITOR_DJANGO_MODULES_DECORATE; } return TITLE_EDITOR_DJANGO_MODULES_SHOW_PARENT_AND_DECORATE; //default } public static boolean useCustomInitIcon() { return PydevPrefs.getPreferences().getBoolean(TITLE_EDITOR_CUSTOM_INIT_ICON); } public static boolean getTitleShowExtension() { return PydevPrefs.getPreferences().getBoolean(TITLE_EDITOR_SHOW_EXTENSION); } public static Image getInitIcon() { ImageCache imageCache = PydevPlugin.getImageCache(); if (useCustomInitIcon()) { return imageCache.get(UIConstants.CUSTOM_INIT_ICON); } else { return imageCache.get(UIConstants.PY_FILE_ICON); //default icon } } public static boolean isDjangoModuleToDecorate(String name) { if (name.startsWith("models.") || name.startsWith("tests.") || name.startsWith("views.")) { if (PythonPathHelper.isValidSourceFile(name)) { return true; } } return false; } public static Image getDjangoModuleIcon(String lastSegment) { return PydevPlugin.getImageCache().getStringDecorated(UIConstants.PY_FILE_CUSTOM_ICON, lastSegment.charAt(0) + ""); } }