/******************************************************************************* * Copyright (c) 2000, 2017 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.dltk.tcl.internal.ui.text; import org.eclipse.dltk.tcl.internal.ui.TclUI; import org.eclipse.dltk.tcl.ui.text.TclPartitions; import org.eclipse.dltk.ui.PreferenceConstants; import org.eclipse.dltk.ui.text.IColorManager; import org.eclipse.dltk.ui.text.ScriptTextTools; import org.eclipse.dltk.ui.text.templates.TemplateVariableProcessor; import org.eclipse.dltk.ui.text.templates.TemplateVariableTextHover; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.text.DefaultInformationControl; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextHover; import org.eclipse.jface.text.contentassist.ContentAssistant; import org.eclipse.jface.text.contentassist.IContentAssistant; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.texteditor.ITextEditor; public class CodeTemplateTclSourceViewerConfiguration extends SimpleTclSourceViewerConfiguration { private final TemplateVariableProcessor fProcessor; public CodeTemplateTclSourceViewerConfiguration(IColorManager colorManager, IPreferenceStore store, ITextEditor editor, TemplateVariableProcessor processor) { super(colorManager, store, editor, TclPartitions.TCL_PARTITIONING, false); fProcessor = processor; } @Override public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { IPreferenceStore store = TclUI.getDefault().getPreferenceStore(); ScriptTextTools textTools = TclUI.getDefault().getTextTools(); IColorManager manager = textTools.getColorManager(); ContentAssistant assistant = new ContentAssistant(); assistant.setContentAssistProcessor(fProcessor, IDocument.DEFAULT_CONTENT_TYPE); // Register the same processor for strings and single line comments to // get code completion at the start of those partitions. assistant.setContentAssistProcessor(fProcessor, TclPartitions.TCL_STRING); assistant.setContentAssistProcessor(fProcessor, TclPartitions.TCL_COMMENT); assistant.enableAutoInsert( store.getBoolean(PreferenceConstants.CODEASSIST_AUTOINSERT)); assistant.enableAutoActivation(store .getBoolean(PreferenceConstants.CODEASSIST_AUTOACTIVATION)); assistant.setAutoActivationDelay(store .getInt(PreferenceConstants.CODEASSIST_AUTOACTIVATION_DELAY)); assistant.setProposalPopupOrientation( IContentAssistant.PROPOSAL_OVERLAY); assistant.setContextInformationPopupOrientation( IContentAssistant.CONTEXT_INFO_ABOVE); assistant.setInformationControlCreator( parent -> new DefaultInformationControl(parent, EditorsUI.getTooltipAffordanceString())); Color background = getColor(store, PreferenceConstants.CODEASSIST_PARAMETERS_BACKGROUND, manager); assistant.setContextInformationPopupBackground(background); assistant.setContextSelectorBackground(background); Color foreground = getColor(store, PreferenceConstants.CODEASSIST_PARAMETERS_FOREGROUND, manager); assistant.setContextInformationPopupForeground(foreground); assistant.setContextSelectorForeground(foreground); return assistant; } private Color getColor(IPreferenceStore store, String key, IColorManager manager) { RGB rgb = PreferenceConverter.getColor(store, key); return manager.getColor(rgb); } /* * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String, int) * * @since 2.1 */ @Override public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType, int stateMask) { return new TemplateVariableTextHover(fProcessor); } }