Package de.sebastianbenz.task.ui.hover

Source Code of de.sebastianbenz.task.ui.hover.TaskHoverProvider

package de.sebastianbenz.task.ui.hover;

import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.internal.text.html.HTMLPrinter;
import org.eclipse.jface.text.IRegion;
import org.eclipse.xtext.ui.editor.hover.html.DefaultEObjectHoverProvider;
import org.eclipse.xtext.ui.editor.hover.html.XtextBrowserInformationControlInput;

import de.sebastianbenz.task.Image;

@SuppressWarnings("restriction")
public class TaskHoverProvider extends DefaultEObjectHoverProvider {

  @Override
  protected XtextBrowserInformationControlInput getHoverInfo(EObject element,
      IRegion hoverRegion, XtextBrowserInformationControlInput previous) {
    if (!(element instanceof Image)) {
      return super.getHoverInfo(element, hoverRegion, previous);
    }
    Image image = (Image) element;
    StringBuffer buffer = new StringBuffer();
    addImageAndLabel(buffer, image);
    HTMLPrinter.insertPageProlog(buffer, 0, getStyleSheet());
    HTMLPrinter.addPageEpilog(buffer);

    return new XtextBrowserInformationControlInput(previous, element,
        buffer.toString(), getLabelProvider());

  }

  public static void addImageAndLabel(StringBuffer buf, Image element) {
    buf.append("<div style='word-wrap: break-word; position: relative; "); //$NON-NLS-1$

    String imageSrcPath = element.getUrl();
    int labelLeft = 5;
    int labelTop = 5;
    int imageWidth = 50;
    int imageHeight = 50;

    if (imageSrcPath != null) {
      buf.append("margin-left: ").append(labelLeft).append("px; "); //$NON-NLS-1$ //$NON-NLS-2$
      buf.append("padding-top: ").append(labelTop).append("px; "); //$NON-NLS-1$ //$NON-NLS-2$
    }

    buf.append("'>"); //$NON-NLS-1$
    if (imageSrcPath != null) {
      if (element != null) {
        try {
          String uri = new URL(element.getUrl()).toURI().toString();
          buf.append("<a href='").append(uri).append("'>"); //$NON-NLS-1$//$NON-NLS-2$
        } catch (MalformedURLException e) {
          element = null; // no link
        } catch (URISyntaxException e) {
          element = null; // no link
        }
      }
      StringBuffer imageStyle = new StringBuffer(
          "border:none; position: absolute; "); //$NON-NLS-1$
      imageStyle.append("width: ").append(imageWidth).append("px; "); //$NON-NLS-1$ //$NON-NLS-2$
      imageStyle.append("height: ").append(imageHeight).append("px; "); //$NON-NLS-1$ //$NON-NLS-2$
      imageStyle.append("left: ").append(-labelLeft - 1).append("px; "); //$NON-NLS-1$ //$NON-NLS-2$

      // hack for broken transparent PNG support in IE 6, see
      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=223900 :
      buf.append("<!--[if lte IE 6]><![if gte IE 5.5]>\n"); //$NON-NLS-1$
      String tooltip = element == null ? "" : "alt='" + element.getDescription() + "' "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
      buf.append("<span ").append(tooltip).append("style=\"").append(imageStyle). //$NON-NLS-1$ //$NON-NLS-2$
          append("filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='").append(imageSrcPath).append("')\"></span>\n"); //$NON-NLS-1$ //$NON-NLS-2$
      buf.append("<![endif]><![endif]-->\n"); //$NON-NLS-1$

      buf.append("<!--[if !IE]>-->\n"); //$NON-NLS-1$
      buf.append("<img ").append(tooltip).append("style='").append(imageStyle).append("' src='").append(imageSrcPath).append("'/>\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
      buf.append("<!--<![endif]-->\n"); //$NON-NLS-1$
      buf.append("<!--[if gte IE 7]>\n"); //$NON-NLS-1$
      buf.append("<img ").append(tooltip).append("style='").append(imageStyle).append("' src='").append(imageSrcPath).append("'/>\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
      buf.append("<![endif]-->\n"); //$NON-NLS-1$
      if (element != null) {
        buf.append("</a>"); //$NON-NLS-1$
      }
    }

    buf.append(element.getDescription());

    buf.append("</div>"); //$NON-NLS-1$
  }

}
TOP

Related Classes of de.sebastianbenz.task.ui.hover.TaskHoverProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.