package org.xmind.ui.internal.decorators;
import org.eclipse.draw2d.IFigure;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.Util;
import org.xmind.gef.draw2d.RotatableWrapLabel;
import org.xmind.gef.part.Decorator;
import org.xmind.gef.part.IGraphicalPart;
import org.xmind.ui.internal.mindmap.InfoItemContentPart;
import org.xmind.ui.mindmap.ITopicPart;
import org.xmind.ui.resources.ColorUtils;
import org.xmind.ui.resources.FontUtils;
import org.xmind.ui.style.Styles;
public class InfoItemContentDecorator extends Decorator {
private static final InfoItemContentDecorator instance = new InfoItemContentDecorator();
@Override
public void activate(IGraphicalPart part, IFigure figure) {
super.activate(part, figure);
figure.setForegroundColor(
ColorUtils.getColor(Styles.YELLOWBOX_TEXT_COLOR));
}
@Override
public void decorate(IGraphicalPart part, IFigure figure) {
super.decorate(part, figure);
ITopicPart topicPart = null;
if (part instanceof InfoItemContentPart) {
topicPart = ((InfoItemContentPart) part).getTopicPart();
if (topicPart != null) {
figure.setFont(
FontUtils.getNewHeight(JFaceResources.getDefaultFont(),
Util.isMac() ? 10 : 8));
} else {
figure.setFont(JFaceResources.getDefaultFont());
}
}
if (figure instanceof RotatableWrapLabel) {
RotatableWrapLabel itemFigure = (RotatableWrapLabel) figure;
if (part instanceof InfoItemContentPart) {
itemFigure.setAbbreviated(true);
itemFigure.setSingleLine(true);
if (topicPart != null) {
setPrefWidth(itemFigure, topicPart);
}
InfoItemContentPart item = (InfoItemContentPart) part;
itemFigure.setText(item.getContent());
}
}
}
private void setPrefWidth(final RotatableWrapLabel itemFigure,
ITopicPart topicPart) {
final IFigure figure = topicPart.getFigure();
figure.getUpdateManager().runWithUpdate(new Runnable() {
public void run() {
itemFigure.setPrefWidth(Math.abs((int) (((figure.getSize().width
+ figure.getClientArea().width) / 2) * 1.1 - 10)));
}
});
}
public static InfoItemContentDecorator getInstance() {
return instance;
}
}