X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/java/hover/BestMatchHover.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/java/hover/BestMatchHover.java new file mode 100644 index 0000000..97b1b75 --- /dev/null +++ b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/ui/text/java/hover/BestMatchHover.java @@ -0,0 +1,141 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 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.text.java.hover; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import net.sourceforge.phpdt.ui.PreferenceConstants; +import net.sourceforge.phpdt.ui.text.java.hover.IJavaEditorTextHover; +import net.sourceforge.phpeclipse.ui.WebUI; +//import net.sourceforge.phpeclipse.PHPeclipsePlugin; + +import org.eclipse.jface.text.IInformationControlCreator; +import org.eclipse.jface.text.IRegion; +import org.eclipse.jface.text.ITextHover; +import org.eclipse.jface.text.ITextHoverExtension; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.information.IInformationProviderExtension2; +import org.eclipse.ui.IEditorPart; + +/** + * Caution: this implementation is a layer breaker and contains some "shortcuts" + */ +public class BestMatchHover extends AbstractJavaEditorTextHover implements + ITextHoverExtension, IInformationProviderExtension2 { + + private List fTextHoverSpecifications; + + private List fInstantiatedTextHovers; + + private ITextHover fBestHover; + + public BestMatchHover() { + installTextHovers(); + } + + public BestMatchHover(IEditorPart editor) { + this(); + setEditor(editor); + } + + /** + * Installs all text hovers. + */ + private void installTextHovers() { + + // initialize lists - indicates that the initialization happened + fTextHoverSpecifications = new ArrayList(2); + fInstantiatedTextHovers = new ArrayList(2); + + // populate list + JavaEditorTextHoverDescriptor[] hoverDescs = WebUI + .getDefault().getJavaEditorTextHoverDescriptors(); + for (int i = 0; i < hoverDescs.length; i++) { + // ensure that we don't add ourselves to the list + if (!PreferenceConstants.ID_BESTMATCH_HOVER.equals(hoverDescs[i] + .getId())) + fTextHoverSpecifications.add(hoverDescs[i]); + } + } + + private void checkTextHovers() { + if (fTextHoverSpecifications.size() == 0) + return; + + for (Iterator iterator = new ArrayList(fTextHoverSpecifications) + .iterator(); iterator.hasNext();) { + JavaEditorTextHoverDescriptor spec = (JavaEditorTextHoverDescriptor) iterator + .next(); + + IJavaEditorTextHover hover = spec.createTextHover(); + if (hover != null) { + hover.setEditor(getEditor()); + addTextHover(hover); + fTextHoverSpecifications.remove(spec); + } + } + } + + protected void addTextHover(ITextHover hover) { + if (!fInstantiatedTextHovers.contains(hover)) + fInstantiatedTextHovers.add(hover); + } + + /* + * @see ITextHover#getHoverInfo(ITextViewer, IRegion) + */ + public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { + + checkTextHovers(); + fBestHover = null; + + if (fInstantiatedTextHovers == null) + return null; + + for (Iterator iterator = fInstantiatedTextHovers.iterator(); iterator + .hasNext();) { + ITextHover hover = (ITextHover) iterator.next(); + + String s = hover.getHoverInfo(textViewer, hoverRegion); + if (s != null && s.trim().length() > 0) { + fBestHover = hover; + return s; + } + } + + return null; + } + + /* + * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator() + * @since 3.0 + */ + public IInformationControlCreator getHoverControlCreator() { + if (fBestHover instanceof ITextHoverExtension) + return ((ITextHoverExtension) fBestHover).getHoverControlCreator(); + + return null; + } + + /* + * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator() + * @since 3.0 + */ + public IInformationControlCreator getInformationPresenterControlCreator() { + if (fBestHover instanceof IInformationProviderExtension2) + return ((IInformationProviderExtension2) fBestHover) + .getInformationPresenterControlCreator(); + + return null; + } +} \ No newline at end of file