/*******************************************************************************
* Copyright (c) 2012, 2013 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.group.painter;
import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
import org.eclipse.nebula.widgets.nattable.group.ColumnGroupModel;
import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
import org.eclipse.nebula.widgets.nattable.painter.cell.CellPainterWrapper;
import org.eclipse.nebula.widgets.nattable.painter.cell.ICellPainter;
import org.eclipse.nebula.widgets.nattable.painter.cell.TextPainter;
import org.eclipse.nebula.widgets.nattable.painter.cell.decorator.CellPainterDecorator;
import org.eclipse.nebula.widgets.nattable.ui.util.CellEdgeEnum;
import org.eclipse.swt.graphics.GC;
public class ColumnGroupHeaderTextPainter extends CellPainterWrapper {
/**
* Creates the default {@link ColumnGroupHeaderTextPainter} that uses a
* {@link TextPainter} as base {@link ICellPainter} and decorate it with the
* {@link ColumnGroupExpandCollapseImagePainter} on the right edge of the
* cell.
*
* @param columnGroupModel
* the column group model that is used by the grid
*
* @deprecated Use constructor without ColumnGroupModel reference
*/
@Deprecated
public ColumnGroupHeaderTextPainter(ColumnGroupModel columnGroupModel) {
this(columnGroupModel, new TextPainter());
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter} and decorate it with
* the {@link ColumnGroupExpandCollapseImagePainter} on the right edge of
* the cell.
*
* @param columnGroupModel
* the column group model that is used by the grid
* @param interiorPainter
* the base {@link ICellPainter} to use
*
* @deprecated Use constructor without ColumnGroupModel reference
*/
@Deprecated
public ColumnGroupHeaderTextPainter(ColumnGroupModel columnGroupModel,
ICellPainter interiorPainter) {
this(columnGroupModel, interiorPainter, CellEdgeEnum.RIGHT);
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter} and decorate it with
* the {@link ColumnGroupExpandCollapseImagePainter} on the specified edge
* of the cell.
*
* @param columnGroupModel
* the column group model that is used by the grid
* @param interiorPainter
* the base {@link ICellPainter} to use
* @param cellEdge
* the edge of the cell on which the column group indicator
* decoration should be applied
*
* @deprecated Use constructor without ColumnGroupModel reference
*/
@Deprecated
public ColumnGroupHeaderTextPainter(ColumnGroupModel columnGroupModel,
ICellPainter interiorPainter, CellEdgeEnum cellEdge) {
this(interiorPainter, cellEdge,
new ColumnGroupExpandCollapseImagePainter(true));
}
/**
* Creates the default {@link ColumnGroupHeaderTextPainter} that uses a
* {@link TextPainter} as base {@link ICellPainter} and decorate it with the
* {@link ColumnGroupExpandCollapseImagePainter} on the right edge of the
* cell.
*/
public ColumnGroupHeaderTextPainter() {
this(new TextPainter());
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter} and decorate it with
* the {@link ColumnGroupExpandCollapseImagePainter} on the right edge of
* the cell.
*
* @param interiorPainter
* the base {@link ICellPainter} to use
*/
public ColumnGroupHeaderTextPainter(ICellPainter interiorPainter) {
this(interiorPainter, CellEdgeEnum.RIGHT);
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter} and decorate it with
* the {@link ColumnGroupExpandCollapseImagePainter} on the specified edge
* of the cell.
*
* @param interiorPainter
* the base {@link ICellPainter} to use
* @param cellEdge
* the edge of the cell on which the column group indicator
* decoration should be applied
*/
public ColumnGroupHeaderTextPainter(ICellPainter interiorPainter,
CellEdgeEnum cellEdge) {
this(interiorPainter, cellEdge,
new ColumnGroupExpandCollapseImagePainter(true));
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter} and decorate it with
* the given {@link ICellPainter} to use for column group related decoration
* on the specified edge of the cell.
*
* @param interiorPainter
* the base {@link ICellPainter} to use
* @param cellEdge
* the edge of the cell on which the column group indicator
* decoration should be applied
* @param decoratorPainter
* the {@link ICellPainter} that should be used to paint the
* column group related decoration (by default the
* {@link ColumnGroupExpandCollapseImagePainter} will be used)
*/
public ColumnGroupHeaderTextPainter(ICellPainter interiorPainter,
CellEdgeEnum cellEdge, ICellPainter decoratorPainter) {
setWrappedPainter(new CellPainterDecorator(interiorPainter, cellEdge,
decoratorPainter));
}
// the following constructors are intended to configure the
// CellPainterDecorator that is created as
// the wrapped painter of this ColumnGroupHeaderTextPainter
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter}. It will use the
* {@link ColumnGroupExpandCollapseImagePainter} as decorator for column
* group related decorations at the specified cell edge, which can be
* configured to render the background or not via method parameter. With the
* additional parameters, the behaviour of the created
* {@link CellPainterDecorator} can be configured in terms of rendering.
*
* @param columnGroupModel
* the column group model that is used by the grid
* @param interiorPainter
* the base {@link ICellPainter} to use
* @param cellEdge
* the edge of the cell on which the column group indicator
* decoration should be applied
* @param paintBg
* flag to configure whether the
* {@link ColumnGroupExpandCollapseImagePainter} should paint the
* background or not
* @param spacing
* the number of pixels that should be used as spacing between
* cell edge and decoration
* @param paintDecorationDependent
* flag to configure if the base {@link ICellPainter} should
* render decoration dependent or not. If it is set to
* <code>false</code>, the base painter will always paint at the
* same coordinates, using the whole cell bounds,
* <code>true</code> will cause the bounds of the cell to shrink
* for the base painter.
*
* @deprecated Use constructor without ColumnGroupModel reference
*/
@Deprecated
public ColumnGroupHeaderTextPainter(ColumnGroupModel columnGroupModel,
ICellPainter interiorPainter, CellEdgeEnum cellEdge,
boolean paintBg, int spacing, boolean paintDecorationDependent) {
ICellPainter sortPainter = new ColumnGroupExpandCollapseImagePainter(
paintBg);
CellPainterDecorator painter = new CellPainterDecorator(
interiorPainter, cellEdge, spacing, sortPainter,
paintDecorationDependent, paintBg);
setWrappedPainter(painter);
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter} and decorate it with
* the {@link ColumnGroupExpandCollapseImagePainter} on the right edge of
* the cell. This constructor gives the opportunity to configure the
* behaviour of the {@link ColumnGroupExpandCollapseImagePainter} and the
* {@link CellPainterDecorator} for some attributes. Remains because of
* downwards compatibility.
*
* @param columnGroupModel
* the column group model that is used by the grid
* @param interiorPainter
* the base {@link ICellPainter} to use
* @param paintBg
* flag to configure whether the
* {@link ColumnGroupExpandCollapseImagePainter} should paint the
* background or not
* @param interiorPainterToSpanFullWidth
* flag to configure how the bounds of the base painter should be
* calculated
*
* @deprecated Use constructor without ColumnGroupModel reference
*/
@Deprecated
public ColumnGroupHeaderTextPainter(ColumnGroupModel columnGroupModel,
ICellPainter interiorPainter, boolean paintBg,
boolean interiorPainterToSpanFullWidth) {
ICellPainter sortPainter = new ColumnGroupExpandCollapseImagePainter(
paintBg);
CellPainterDecorator painter = new CellPainterDecorator(
interiorPainter, CellEdgeEnum.RIGHT, 0, sortPainter,
!interiorPainterToSpanFullWidth, paintBg);
setWrappedPainter(painter);
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter}. It will use the
* {@link ColumnGroupExpandCollapseImagePainter} as decorator for column
* group related decorations at the specified cell edge, which can be
* configured to render the background or not via method parameter. With the
* additional parameters, the behaviour of the created
* {@link CellPainterDecorator} can be configured in terms of rendering.
*
* @param interiorPainter
* the base {@link ICellPainter} to use
* @param cellEdge
* the edge of the cell on which the column group indicator
* decoration should be applied
* @param paintBg
* flag to configure whether the
* {@link ColumnGroupExpandCollapseImagePainter} should paint the
* background or not
* @param spacing
* the number of pixels that should be used as spacing between
* cell edge and decoration
* @param paintDecorationDependent
* flag to configure if the base {@link ICellPainter} should
* render decoration dependent or not. If it is set to
* <code>false</code>, the base painter will always paint at the
* same coordinates, using the whole cell bounds,
* <code>true</code> will cause the bounds of the cell to shrink
* for the base painter.
*/
public ColumnGroupHeaderTextPainter(ICellPainter interiorPainter,
CellEdgeEnum cellEdge, boolean paintBg, int spacing,
boolean paintDecorationDependent) {
ICellPainter sortPainter = new ColumnGroupExpandCollapseImagePainter(
paintBg);
CellPainterDecorator painter = new CellPainterDecorator(
interiorPainter, cellEdge, spacing, sortPainter,
paintDecorationDependent, paintBg);
setWrappedPainter(painter);
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter}. It will use the given
* {@link ICellPainter} as decorator for column group related decorations at
* the specified cell edge, which can be configured to render the background
* or not via method parameter. With the additional parameters, the
* behaviour of the created {@link CellPainterDecorator} can be configured
* in terms of rendering.
*
* @param interiorPainter
* the base {@link ICellPainter} to use
* @param cellEdge
* the edge of the cell on which the column group indicator
* decoration should be applied
* @param decoratorPainter
* the {@link ICellPainter} that should be used to paint the
* column group related decoration
* @param paintBg
* flag to configure whether the {@link CellPainterDecorator}
* should paint the background or not
* @param spacing
* the number of pixels that should be used as spacing between
* cell edge and decoration
* @param paintDecorationDependent
* flag to configure if the base {@link ICellPainter} should
* render decoration dependent or not. If it is set to
* <code>false</code>, the base painter will always paint at the
* same coordinates, using the whole cell bounds,
* <code>true</code> will cause the bounds of the cell to shrink
* for the base painter.
*/
public ColumnGroupHeaderTextPainter(ICellPainter interiorPainter,
CellEdgeEnum cellEdge, ICellPainter decoratorPainter,
boolean paintBg, int spacing, boolean paintDecorationDependent) {
CellPainterDecorator painter = new CellPainterDecorator(
interiorPainter, cellEdge, spacing, decoratorPainter,
paintDecorationDependent, paintBg);
setWrappedPainter(painter);
}
/**
* Creates a {@link ColumnGroupHeaderTextPainter} that uses the given
* {@link ICellPainter} as base {@link ICellPainter} and decorate it with
* the {@link ColumnGroupExpandCollapseImagePainter} on the right edge of
* the cell. This constructor gives the opportunity to configure the
* behaviour of the {@link ColumnGroupExpandCollapseImagePainter} and the
* {@link CellPainterDecorator} for some attributes. Remains because of
* downwards compatibility.
*
* @param interiorPainter
* the base {@link ICellPainter} to use
* @param paintBg
* flag to configure whether the
* {@link ColumnGroupExpandCollapseImagePainter} should paint the
* background or not
* @param interiorPainterToSpanFullWidth
* flag to configure how the bounds of the base painter should be
* calculated
*/
public ColumnGroupHeaderTextPainter(ICellPainter interiorPainter,
boolean paintBg, boolean interiorPainterToSpanFullWidth) {
ICellPainter sortPainter = new ColumnGroupExpandCollapseImagePainter(
paintBg);
CellPainterDecorator painter = new CellPainterDecorator(
interiorPainter, CellEdgeEnum.RIGHT, 0, sortPainter,
!interiorPainterToSpanFullWidth, paintBg);
setWrappedPainter(painter);
}
/**
* Preferred width is used during auto resize. Column groups do not
* participate in auto resize, since auto resizing is done by the column
* width. Hence, always return 0
*/
@Override
public int getPreferredWidth(ILayerCell cell, GC gc,
IConfigRegistry configRegistry) {
return 0;
}
@Override
public int getPreferredHeight(ILayerCell cell, GC gc,
IConfigRegistry configRegistry) {
return 25;
}
}