X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/preferences/TemplateEditorSourceViewerConfiguration.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/preferences/TemplateEditorSourceViewerConfiguration.java new file mode 100644 index 0000000..439288a --- /dev/null +++ b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/preferences/TemplateEditorSourceViewerConfiguration.java @@ -0,0 +1,182 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.preferences; + +import java.util.Iterator; + +import net.sourceforge.phpdt.internal.ui.text.IPHPPartitions; +import net.sourceforge.phpdt.internal.ui.text.JavaWordFinder; +import net.sourceforge.phpdt.internal.ui.text.template.preferences.TemplateVariableProcessor; +import net.sourceforge.phpdt.ui.PreferenceConstants; +import net.sourceforge.phpdt.ui.text.IColorManager; +import net.sourceforge.phpdt.ui.text.JavaTextTools; +import net.sourceforge.phpdt.ui.text.PHPSourceViewerConfiguration; +//import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import net.sourceforge.phpeclipse.ui.WebUI; + +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PreferenceConverter; +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IRegion; +import org.eclipse.jface.text.ITextHover; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.contentassist.ContentAssistant; +import org.eclipse.jface.text.contentassist.IContentAssistant; +import org.eclipse.jface.text.source.ISourceViewer; +import org.eclipse.jface.text.templates.TemplateContextType; +import org.eclipse.jface.text.templates.TemplateVariableResolver; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.ui.texteditor.ITextEditor; + +public class TemplateEditorSourceViewerConfiguration extends + PHPSourceViewerConfiguration { + + private static class TemplateVariableTextHover implements ITextHover { + + private TemplateVariableProcessor fProcessor; + + /** + * @param type + */ + public TemplateVariableTextHover(TemplateVariableProcessor processor) { + fProcessor = processor; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.text.ITextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer, + * org.eclipse.jface.text.IRegion) + */ + public String getHoverInfo(ITextViewer textViewer, IRegion subject) { + try { + IDocument doc = textViewer.getDocument(); + int offset = subject.getOffset(); + if (offset >= 2 && "${".equals(doc.get(offset - 2, 2))) { //$NON-NLS-1$ + String varName = doc.get(offset, subject.getLength()); + TemplateContextType contextType = fProcessor + .getContextType(); + if (contextType != null) { + Iterator iter = contextType.resolvers(); + while (iter.hasNext()) { + TemplateVariableResolver var = (TemplateVariableResolver) iter + .next(); + if (varName.equals(var.getType())) { + return var.getDescription(); + } + } + } + } + } catch (BadLocationException e) { + } + return null; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.text.ITextHover#getHoverRegion(org.eclipse.jface.text.ITextViewer, + * int) + */ + public IRegion getHoverRegion(ITextViewer textViewer, int offset) { + if (textViewer != null) { + return JavaWordFinder + .findWord(textViewer.getDocument(), offset); + } + return null; + } + + } + + private final TemplateVariableProcessor fProcessor; + + public TemplateEditorSourceViewerConfiguration(IColorManager colorManager, + IPreferenceStore store, ITextEditor editor, + TemplateVariableProcessor processor) { + super(colorManager, store, editor, IPHPPartitions.PHP_PARTITIONING); + fProcessor = processor; + } + + /* + * @see SourceViewerConfiguration#getContentAssistant(ISourceViewer) + */ + public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { + + IPreferenceStore store = WebUI.getDefault() + .getPreferenceStore(); + JavaTextTools textTools = WebUI.getDefault() + .getJavaTextTools(); + 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, + IPHPPartitions.PHP_STRING_DQ); + assistant.setContentAssistProcessor(fProcessor, + IPHPPartitions.PHP_STRING_SQ); + assistant.setContentAssistProcessor(fProcessor, + IPHPPartitions.PHP_STRING_HEREDOC); + assistant.setContentAssistProcessor(fProcessor, + IPHPPartitions.PHP_SINGLELINE_COMMENT); + assistant.setContentAssistProcessor(fProcessor, + IPHPPartitions.PHP_MULTILINE_COMMENT); + assistant.setContentAssistProcessor(fProcessor, + IPHPPartitions.PHP_PHPDOC_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(ContentAssistant.PROPOSAL_OVERLAY); + assistant + .setContextInformationPopupOrientation(ContentAssistant.CONTEXT_INFO_ABOVE); + assistant + .setInformationControlCreator(getInformationControlCreator(sourceViewer)); + + Color background = getColor(store, + PreferenceConstants.CODEASSIST_PROPOSALS_BACKGROUND, manager); + assistant.setContextInformationPopupBackground(background); + assistant.setContextSelectorBackground(background); + assistant.setProposalSelectorBackground(background); + + Color foreground = getColor(store, + PreferenceConstants.CODEASSIST_PROPOSALS_FOREGROUND, manager); + assistant.setContextInformationPopupForeground(foreground); + assistant.setContextSelectorForeground(foreground); + assistant.setProposalSelectorForeground(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 + */ + public ITextHover getTextHover(ISourceViewer sourceViewer, + String contentType, int stateMask) { + return new TemplateVariableTextHover(fProcessor); + } + +}