/**
* Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.shared_ui.tooltips.presenter;
import org.eclipse.jface.text.DefaultInformationControl;
import org.eclipse.jface.text.TextPresentation;
import org.eclipse.swt.graphics.Drawable;
import org.eclipse.swt.widgets.Display;
import org.python.pydev.shared_core.string.FastStringBuffer;
import org.python.pydev.shared_core.string.StringUtils;
/**
* Base implementation for an information presenter.
*/
public abstract class AbstractInformationPresenter implements DefaultInformationControl.IInformationPresenter,
DefaultInformationControl.IInformationPresenterExtension, IInformationPresenterAsTooltip {
/**
* The line delimiter that should be used in the tooltip.
*/
public static final String LINE_DELIM = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
protected IInformationPresenterControlManager informationPresenterControlManager;
protected Object data;
/**
* This method shouldn't really be used, but if it is, just forward it to the new method.
*/
@Override
public String updatePresentation(Display display, String hoverInfo, TextPresentation presentation, int maxWidth,
int maxHeight) {
return updatePresentation((Drawable) display, hoverInfo, presentation, maxWidth, maxHeight);
}
/**
* The line delimiters must match the platform for the bolds to be correct, so, in this function we remove
* the ones existing and add the ones dependent on the platform
*/
protected String correctLineDelimiters(String str) {
FastStringBuffer buf = new FastStringBuffer();
for (String s : StringUtils.splitInLines(str)) {
boolean found = false;
while (s.endsWith("\r") || s.endsWith("\n")) {
found = true;
s = s.substring(0, s.length() - 1);
}
buf.append(s);
if (found) {
buf.append(LINE_DELIM);
}
}
str = buf.toString();
return str;
}
@Override
public void setInformationPresenterControlManager(
IInformationPresenterControlManager informationPresenterControlManager) {
this.informationPresenterControlManager = informationPresenterControlManager;
}
public void hideInformationControl(boolean activateEditor, boolean restoreFocus) {
if (this.informationPresenterControlManager != null) {
this.informationPresenterControlManager.hideInformationControl(activateEditor, restoreFocus);
}
}
@Override
public void setData(Object data) {
this.data = data;
}
}