/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.internal.decorators; import static org.xmind.ui.style.StyleUtils.getCompositeFont; import static org.xmind.ui.style.StyleUtils.getTextStyle; import org.eclipse.draw2d.IFigure; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.graphics.TextStyle; import org.xmind.gef.draw2d.IMinimizable; import org.xmind.gef.draw2d.ITextFigure; import org.xmind.gef.graphicalpolicy.IStyleSelector; import org.xmind.gef.part.Decorator; import org.xmind.gef.part.IGraphicalPart; import org.xmind.ui.mindmap.INumberingPart; import org.xmind.ui.mindmap.ITopicPart; import org.xmind.ui.style.StyleUtils; import org.xmind.ui.style.Styles; public class NumberingDecorator extends Decorator { private static final NumberingDecorator instance = new NumberingDecorator(); protected NumberingDecorator() { } public void activate(IGraphicalPart part, IFigure figure) { super.activate(part, figure); figure.setMinimumSize(IMinimizable.DEFAULT_MIN_SIZE); } public void decorate(IGraphicalPart part, IFigure figure) { super.decorate(part, figure); if (figure instanceof ITextFigure && part instanceof INumberingPart) { ITextFigure textFigure = (ITextFigure) figure; String text = ((INumberingPart) part).getFullNumberingText(); if (text != null) textFigure.setText(text); decorateTextFigure(part, textFigure); } } protected void decorateTextFigure(IGraphicalPart part, ITextFigure figure) { IGraphicalPart parent = getOwnerPart(part); if (parent != null) part = parent; decorateTextFigure(part, StyleUtils.getStyleSelector(part), figure); } protected void decorateTextFigure(IGraphicalPart ownerPart, IStyleSelector ss, ITextFigure figure) { TextStyle style = getTextStyle(ownerPart, ss); if (style != null) { figure.setStyle(style); } else { figure.setFont(getCompositeFont(ownerPart, ss, JFaceResources .getDefaultFont())); figure.setForegroundColor(StyleUtils.getColor(ownerPart, ss, Styles.TextColor, null, Styles.DEF_TEXT_COLOR)); } } protected IGraphicalPart getOwnerPart(IGraphicalPart part) { if (part.getParent() instanceof ITopicPart) return ((ITopicPart) part.getParent()).getOwnerBranch(); return null; } public static NumberingDecorator getInstance() { return instance; } }