--- /dev/null
+/*******************************************************************************
+ * 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 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 = PHPeclipsePlugin.getDefault()
+ .getPreferenceStore();
+ JavaTextTools textTools = PHPeclipsePlugin.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);
+ }
+
+}