/* * Copyright (c) 2012, the Dart project authors. * * Licensed under the Eclipse Public License v1.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/legal/epl-v10.html * * 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.google.dart.tools.ui.internal.text.functions; import com.google.dart.tools.ui.DartToolsPlugin; import com.google.dart.tools.ui.DartX; import com.google.dart.tools.ui.PreferenceConstants; import com.google.dart.tools.ui.internal.text.dart.DartCompletionProcessor; import com.google.dart.tools.ui.text.DartPartitions; import com.google.dart.tools.ui.text.DartTextTools; import com.google.dart.tools.ui.text.IColorManager; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.ContentAssistant; import org.eclipse.jface.text.contentassist.IContentAssistProcessor; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; public class ContentAssistPreference { /** Preference key for content assist auto activation */ private final static String AUTOACTIVATION = PreferenceConstants.CODEASSIST_AUTOACTIVATION; /** Preference key for content assist auto activation delay */ private final static String AUTOACTIVATION_DELAY = PreferenceConstants.CODEASSIST_AUTOACTIVATION_DELAY; /** Preference key for content assist proposal color */ private final static String PROPOSALS_FOREGROUND = PreferenceConstants.CODEASSIST_PROPOSALS_FOREGROUND; /** Preference key for content assist proposal color */ private final static String PROPOSALS_BACKGROUND = PreferenceConstants.CODEASSIST_PROPOSALS_BACKGROUND; /** Preference key for content assist parameters color */ private final static String PARAMETERS_FOREGROUND = PreferenceConstants.CODEASSIST_PARAMETERS_FOREGROUND; /** Preference key for content assist parameters color */ private final static String PARAMETERS_BACKGROUND = PreferenceConstants.CODEASSIST_PARAMETERS_BACKGROUND; /** Preference key for content assist auto insert */ private final static String AUTOINSERT = PreferenceConstants.CODEASSIST_AUTOINSERT; /** Preference key for java content assist auto activation triggers */ private final static String AUTOACTIVATION_TRIGGERS_JAVA = PreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVA; /** Preference key for jsdoc content assist auto activation triggers */ @SuppressWarnings("unused") private final static String AUTOACTIVATION_TRIGGERS_JAVADOC = PreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVADOC; /** Preference key for visibility of proposals */ private final static String SHOW_VISIBLE_PROPOSALS = PreferenceConstants.CODEASSIST_SHOW_VISIBLE_PROPOSALS; /** Preference key for case sensitivity of proposals */ private final static String CASE_SENSITIVITY = PreferenceConstants.CODEASSIST_CASE_SENSITIVITY; /** Preference key for adding imports on code assist */ /** Preference key for filling argument names on method completion */ private static final String FILL_METHOD_ARGUMENTS = PreferenceConstants.CODEASSIST_FILL_ARGUMENT_NAMES; /** Preference key for prefix completion. */ private static final String PREFIX_COMPLETION = PreferenceConstants.CODEASSIST_PREFIX_COMPLETION; /** * Changes the configuration of the given content assistant according to the given property change * event and the given preference store. */ public static void changeConfiguration(ContentAssistant assistant, IPreferenceStore store, PropertyChangeEvent event) { String p = event.getProperty(); if (AUTOACTIVATION.equals(p)) { boolean enabled = store.getBoolean(AUTOACTIVATION); assistant.enableAutoActivation(enabled); } else if (AUTOACTIVATION_DELAY.equals(p)) { int delay = store.getInt(AUTOACTIVATION_DELAY); assistant.setAutoActivationDelay(delay); } else if (PROPOSALS_FOREGROUND.equals(p)) { Color c = getColor(store, PROPOSALS_FOREGROUND); assistant.setProposalSelectorForeground(c); } else if (PROPOSALS_BACKGROUND.equals(p)) { Color c = getColor(store, PROPOSALS_BACKGROUND); assistant.setProposalSelectorBackground(c); } else if (PARAMETERS_FOREGROUND.equals(p)) { Color c = getColor(store, PARAMETERS_FOREGROUND); assistant.setContextInformationPopupForeground(c); assistant.setContextSelectorForeground(c); } else if (PARAMETERS_BACKGROUND.equals(p)) { Color c = getColor(store, PARAMETERS_BACKGROUND); assistant.setContextInformationPopupBackground(c); assistant.setContextSelectorBackground(c); } else if (AUTOINSERT.equals(p)) { boolean enabled = store.getBoolean(AUTOINSERT); assistant.enableAutoInsert(enabled); } else if (PREFIX_COMPLETION.equals(p)) { boolean enabled = store.getBoolean(PREFIX_COMPLETION); assistant.enablePrefixCompletion(enabled); } changeJavaProcessor(assistant, store, p); changeJavaDocProcessor(assistant, store, p); } /** * Configure the given content assistant from the given store. */ public static void configure(ContentAssistant assistant, IPreferenceStore store) { DartTextTools textTools = DartToolsPlugin.getDefault().getDartTextTools(); IColorManager manager = textTools.getColorManager(); boolean enabled = store.getBoolean(AUTOACTIVATION); assistant.enableAutoActivation(enabled); int delay = store.getInt(AUTOACTIVATION_DELAY); assistant.setAutoActivationDelay(delay); Color c = getColor(store, PROPOSALS_FOREGROUND, manager); assistant.setProposalSelectorForeground(c); c = getColor(store, PROPOSALS_BACKGROUND, manager); assistant.setProposalSelectorBackground(c); c = getColor(store, PARAMETERS_FOREGROUND, manager); assistant.setContextInformationPopupForeground(c); assistant.setContextSelectorForeground(c); c = getColor(store, PARAMETERS_BACKGROUND, manager); assistant.setContextInformationPopupBackground(c); assistant.setContextSelectorBackground(c); enabled = store.getBoolean(AUTOINSERT); assistant.enableAutoInsert(enabled); enabled = store.getBoolean(PREFIX_COMPLETION); assistant.enablePrefixCompletion(enabled); assistant.enableColoredLabels(true); configureJavaProcessor(assistant, store); configureStringProcessor(assistant, store); DartX.todo("dartdoc"); // configureJavaDocProcessor(assistant, store); } public static boolean fillArgumentsOnMethodCompletion(IPreferenceStore store) { return store.getBoolean(FILL_METHOD_ARGUMENTS); } private static void changeJavaDocProcessor(ContentAssistant assistant, IPreferenceStore store, String key) { DartX.todo(); // JavadocCompletionProcessor jdcp = getJavaDocProcessor(assistant); // if (jdcp == null) // return; // // if (AUTOACTIVATION_TRIGGERS_JAVADOC.equals(key)) { // String triggers = store.getString(AUTOACTIVATION_TRIGGERS_JAVADOC); // if (triggers != null) // jdcp.setCompletionProposalAutoActivationCharacters(triggers.toCharArray()); // } else if (CASE_SENSITIVITY.equals(key)) { // boolean enabled = store.getBoolean(CASE_SENSITIVITY); // jdcp.restrictProposalsToMatchingCases(enabled); // } } private static void changeJavaProcessor(ContentAssistant assistant, IPreferenceStore store, String key) { DartCompletionProcessor jcp = getJavaProcessor(assistant); if (jcp == null) { return; } if (AUTOACTIVATION_TRIGGERS_JAVA.equals(key)) { String triggers = store.getString(AUTOACTIVATION_TRIGGERS_JAVA); if (triggers != null) { jcp.setCompletionProposalAutoActivationCharacters(triggers.toCharArray()); } } else if (SHOW_VISIBLE_PROPOSALS.equals(key)) { boolean enabled = store.getBoolean(SHOW_VISIBLE_PROPOSALS); jcp.restrictProposalsToVisibility(enabled); } else if (CASE_SENSITIVITY.equals(key)) { boolean enabled = store.getBoolean(CASE_SENSITIVITY); jcp.restrictProposalsToMatchingCases(enabled); } } @SuppressWarnings("unused") private static void configureJavaDocProcessor(ContentAssistant assistant, IPreferenceStore store) { DartX.todo(); // JavadocCompletionProcessor jdcp = getJavaDocProcessor(assistant); // if (jdcp == null) // return; // // String triggers = store.getString(AUTOACTIVATION_TRIGGERS_JAVADOC); // if (triggers != null) // jdcp.setCompletionProposalAutoActivationCharacters(triggers.toCharArray()); // // boolean enabled = store.getBoolean(CASE_SENSITIVITY); // jdcp.restrictProposalsToMatchingCases(enabled); } private static void configureJavaProcessor(ContentAssistant assistant, IPreferenceStore store) { DartCompletionProcessor jcp = getJavaProcessor(assistant); if (jcp == null) { return; } String triggers = store.getString(AUTOACTIVATION_TRIGGERS_JAVA); if (triggers != null) { jcp.setCompletionProposalAutoActivationCharacters(triggers.toCharArray()); } boolean enabled = store.getBoolean(SHOW_VISIBLE_PROPOSALS); jcp.restrictProposalsToVisibility(enabled); enabled = store.getBoolean(CASE_SENSITIVITY); jcp.restrictProposalsToMatchingCases(enabled); } private static void configureStringProcessor(ContentAssistant assistant, IPreferenceStore store) { DartCompletionProcessor processor = getStringProcessor(assistant); if (processor == null) { return; } processor.setCompletionProposalAutoActivationCharacters(new char[] {':'}); } private static Color getColor(IPreferenceStore store, String key) { DartTextTools textTools = DartToolsPlugin.getDefault().getDartTextTools(); return getColor(store, key, textTools.getColorManager()); } private static Color getColor(IPreferenceStore store, String key, IColorManager manager) { RGB rgb = PreferenceConverter.getColor(store, key); return manager.getColor(rgb); } // private static JavadocCompletionProcessor getJavaDocProcessor( // ContentAssistant assistant) { // IContentAssistProcessor p = assistant.getContentAssistProcessor(DartPartitions.DART_DOC); // if (p instanceof JavadocCompletionProcessor) // return (JavadocCompletionProcessor) p; // return null; // } private static DartCompletionProcessor getJavaProcessor(ContentAssistant assistant) { IContentAssistProcessor p = assistant.getContentAssistProcessor(IDocument.DEFAULT_CONTENT_TYPE); if (p instanceof DartCompletionProcessor) { return (DartCompletionProcessor) p; } return null; } private static DartCompletionProcessor getStringProcessor(ContentAssistant assistant) { IContentAssistProcessor p = assistant.getContentAssistProcessor(DartPartitions.DART_STRING); if (p instanceof DartCompletionProcessor) { return (DartCompletionProcessor) p; } return null; } }