/*******************************************************************************
* Copyright (c) 2012 Original authors and others.
* 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:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.tree.painter;
import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
import org.eclipse.nebula.widgets.nattable.painter.cell.ImagePainter;
import org.eclipse.nebula.widgets.nattable.tree.ITreeRowModel;
import org.eclipse.nebula.widgets.nattable.tree.config.DefaultTreeLayerConfiguration;
import org.eclipse.nebula.widgets.nattable.util.GUIHelper;
import org.eclipse.swt.graphics.Image;
public class TreeImagePainter extends ImagePainter {
private Image collapsedImage;
private Image expandedImage;
private Image leafImage;
/**
* Create a TreeImagePainter that uses the default icons to show the tree
* state.
*
* @param treeRowModel
* The ITreeRowModel to determine the tree state. <b>Is not used
* anymore!</b>
*
* @deprecated Use constructor without ITreeRowModel parameter
*/
@Deprecated
public TreeImagePainter(ITreeRowModel<?> treeRowModel) {
this(
GUIHelper.getImage("plus"), GUIHelper.getImage("minus"), GUIHelper.getImage("leaf")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
/**
* Create a TreeImagePainter that uses the given icons to show the tree
* state.
*
* @param treeRowModel
* The ITreeRowModel to determine the tree state. <b>Is not used
* anymore!</b>
* @param plusImage
* The image that should be shown for collapsed tree nodes.
* @param minusImage
* The image that should be shown for expanded tree nodes.
* @param leafImage
* The image that should be shown for leafs without children.
*
* @deprecated Use constructor without ITreeRowModel parameter
*/
@Deprecated
public TreeImagePainter(ITreeRowModel<?> treeRowModel, Image plusImage,
Image minusImage, Image leafImage) {
this(plusImage, minusImage, leafImage);
}
/**
* Create a TreeImagePainter that uses the default icons to show the tree
* state and renders the background.
*/
public TreeImagePainter() {
this(true);
}
/**
* Create a TreeImagePainter that uses the default icons to show the tree
* state.
*
* @param paintBg
* <code>true</code> if it should render the background itself,
* <code>false</code> if the background rendering should be
* skipped in here.
*/
public TreeImagePainter(boolean paintBg) {
this(
paintBg,
GUIHelper.getImage("plus"), GUIHelper.getImage("minus"), GUIHelper.getImage("leaf")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
/**
* Create a TreeImagePainter that uses the given icons to show the tree
* state and renders the background.
*
* @param plusImage
* The image that should be shown for collapsed tree nodes.
* @param minusImage
* The image that should be shown for expanded tree nodes.
* @param leafImage
* The image that should be shown for leafs without children.
*/
public TreeImagePainter(Image plusImage, Image minusImage, Image leafImage) {
this(true, plusImage, minusImage, leafImage);
}
/**
* Create a TreeImagePainter that uses the given icons to show the tree
* state.
*
* @param paintBg
* <code>true</code> if it should render the background itself,
* <code>false</code> if the background rendering should be
* skipped in here.
* @param plusImage
* The image that should be shown for collapsed tree nodes.
* @param minusImage
* The image that should be shown for expanded tree nodes.
* @param leafImage
* The image that should be shown for leafs without children.
*/
public TreeImagePainter(boolean paintBg, Image plusImage, Image minusImage,
Image leafImage) {
super(null, paintBg);
this.collapsedImage = plusImage;
this.expandedImage = minusImage;
this.leafImage = leafImage;
}
public Image getPlusImage() {
return this.collapsedImage;
}
public Image getMinusImage() {
return this.expandedImage;
}
public Image getLeafImage() {
return this.leafImage;
}
@Override
protected Image getImage(ILayerCell cell, IConfigRegistry configRegistry) {
Image icon = null;
if (isLeaf(cell)) {
icon = this.leafImage;
} else if (isCollapsed(cell)) {
icon = this.collapsedImage;
} else if (isExpanded(cell)) {
icon = this.expandedImage;
}
return icon;
}
private boolean isLeaf(ILayerCell cell) {
return cell.getConfigLabels().hasLabel(
DefaultTreeLayerConfiguration.TREE_LEAF_CONFIG_TYPE);
}
private boolean isCollapsed(ILayerCell cell) {
return cell.getConfigLabels().hasLabel(
DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE);
}
private boolean isExpanded(ILayerCell cell) {
return cell.getConfigLabels().hasLabel(
DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE);
}
/**
* Set the images that should be used to indicate the current tree state.
*
* @param collapsedImage
* The image that should be shown for collapsed tree nodes.
* @param expandedImage
* The image that should be shown for expanded tree nodes.
* @param leafImage
* The image that should be shown for leafs without children.
*/
public void setExpandCollapseImages(Image collapsedImage,
Image expandedImage, Image leafImage) {
this.collapsedImage = collapsedImage;
this.expandedImage = expandedImage;
this.leafImage = leafImage;
}
}