/******************************************************************************* * 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); } }