1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / preferences / TemplateEditorSourceViewerConfiguration.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TemplateEditorSourceViewerConfiguration.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TemplateEditorSourceViewerConfiguration.java
new file mode 100644 (file)
index 0000000..f16ecab
--- /dev/null
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * 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);
+       }
+
+}