blob: a313c6e83fb163bcdc9c587eda979bc6a7e40322 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 protos software gmbh (http://www.protos.de).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* CONTRIBUTORS:
* https://borisdevnotes.wordpress.com/2014/02/28/xtext-usability-hovers-on-keywords/
* Juergen Haug (initial contribution)
*
*******************************************************************************/
package org.eclipse.etrice.core.ui.hover;
import java.io.IOException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.etrice.core.ui.RoomUiActivator;
import org.eclipse.etrice.doc.ETriceHelp;
import org.eclipse.jface.internal.text.html.HTMLPrinter;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.xtext.Keyword;
import org.eclipse.xtext.ui.editor.hover.html.DefaultEObjectHoverProvider;
import org.eclipse.xtext.ui.editor.hover.html.XtextBrowserInformationControlInput;
import org.eclipse.xtext.util.Files;
import com.google.inject.Inject;
@SuppressWarnings("restriction")
public class KeywordHoverProvider extends DefaultEObjectHoverProvider {
private static final String styleSheetFileName = "/eTriceKeywordHoverStyle.css";
@Inject
protected ILabelProvider labelProvider;
private String styleSheet = null;
@Override
protected XtextBrowserInformationControlInput getHoverInfo(EObject element, IRegion hoverRegion,
XtextBrowserInformationControlInput previous) {
if (element instanceof Keyword) {
String html = getHoverInfoAsHtml(element);
if (html != null) {
StringBuffer buffer = new StringBuffer(html);
HTMLPrinter.insertPageProlog(buffer, 0, getStyleSheet());
HTMLPrinter.addPageEpilog(buffer);
return new XtextBrowserInformationControlInput(previous, element, buffer.toString(), labelProvider);
}
}
return super.getHoverInfo(element, hoverRegion, previous);
}
@Override
protected String getHoverInfoAsHtml(EObject o) {
if (o instanceof Keyword) {
String help = ETriceHelp.getKeywordHoverContentProvider().getHTMLContent(((Keyword) o).getValue());
if (help != null)
return help;
}
return super.getHoverInfoAsHtml(o);
}
@Override
protected String loadStyleSheet() {
String superStyle = super.loadStyleSheet();
if (styleSheet == null || ETriceHelp.DEV_MODE) {
styleSheet = "";
try {
styleSheet = Files.readStreamIntoString(RoomUiActivator.getDefault().getBundle()
.getEntry(styleSheetFileName).openStream());
}
catch (IOException e) {
e.printStackTrace();
}
}
return superStyle + styleSheet;
}
}