/* ******************************************************************************
* 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.gallery;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.swt.graphics.Color;
import org.xmind.gef.IViewer;
import org.xmind.gef.draw2d.ITextFigure;
import org.xmind.gef.part.Decorator;
import org.xmind.gef.part.IGraphicalPart;
import org.xmind.gef.util.Properties;
import org.xmind.ui.viewers.IGraphicalToolTipProvider;
import org.xmind.ui.viewers.IToolTipProvider;
public class FrameDecorator extends Decorator {
public static final FrameDecorator DEFAULT = new FrameDecorator();
public void decorate(IGraphicalPart part, IFigure figure) {
super.decorate(part, figure);
FrameFigure frame = (FrameFigure) part.getFigure();
Object model = part.getModel();
IViewer viewer = part.getSite().getViewer();
Properties properties = viewer.getProperties();
IBaseLabelProvider labelProvider = (IBaseLabelProvider) viewer
.getAdapter(IBaseLabelProvider.class);
boolean hideTitle = properties.getBoolean(GalleryViewer.HideTitle,
false);
frame.setHideTitle(hideTitle);
boolean flat = properties.getBoolean(GalleryViewer.FlatFrames, false);
frame.setFlat(flat);
frame.setContentSize(
(Dimension) properties.get(GalleryViewer.FrameContentSize));
int titlePlacement = properties.getInteger(GalleryViewer.TitlePlacement,
GalleryViewer.TITLE_TOP.intValue());
frame.setTitlePlacement(titlePlacement);
if (!hideTitle) {
decorateTitle(frame.getTitle(), model, labelProvider);
}
boolean useCustomDecorator = properties
.getBoolean(GalleryViewer.CustomContentPaneDecorator, false);
if (useCustomDecorator && labelProvider instanceof ILabelDecorator) {
IDecorationContext context = viewer instanceof IDecorationContext
? (IDecorationContext) viewer : null;
((ILabelDecorator) labelProvider)
.decorateFigure(frame.getContentPane(), model, context);
}
if (labelProvider instanceof IGraphicalToolTipProvider) {
IGraphicalToolTipProvider toolTipProvider = (IGraphicalToolTipProvider) labelProvider;
IFigure toolTipFigure = toolTipProvider.getToolTipFigure(model);
frame.setToolTip(toolTipFigure);
}
if (labelProvider instanceof IToolTipProvider) {
IToolTipProvider toolTipProvider = (IToolTipProvider) labelProvider;
String toolTip = toolTipProvider.getToolTip(model);
if (toolTip == null || "".equals(toolTip)) { //$NON-NLS-1$
frame.setToolTip(null);
} else {
Label toolTipFigure = new Label();
toolTipFigure.setText(toolTip);
frame.setToolTip(toolTipFigure);
}
}
ShadowedLayer layer = frame.getContentPane();
layer.setBorderWidth(
properties.getInteger(GalleryViewer.ContentPaneBorderWidth, 1));
Object color = properties.get(GalleryViewer.ContentPaneBorderColor);
if (color != null && color instanceof Color) {
layer.setBorderAlpha(0xff);
layer.setBorderColor((Color) color);
}
}
private String getText(Object element, IBaseLabelProvider labelProvider) {
if (labelProvider instanceof ILabelProvider)
return ((ILabelProvider) labelProvider).getText(element);
return null;
}
protected void decorateTitle(ITextFigure titleFigure, Object model,
IBaseLabelProvider labelProvider) {
String text = getText(model, labelProvider);
if (text == null)
text = ""; //$NON-NLS-1$
titleFigure.setText(text);
if (labelProvider instanceof IFontProvider) {
IFontProvider fontProvider = (IFontProvider) labelProvider;
titleFigure.setFont(fontProvider.getFont(model));
}
if (labelProvider instanceof IColorProvider) {
IColorProvider colorProvider = (IColorProvider) labelProvider;
titleFigure.setForegroundColor(colorProvider.getForeground(model));
titleFigure.setBackgroundColor(colorProvider.getBackground(model));
}
}
}