/*******************************************************************************
* Copyright (c) 2014 Dirk Fauth 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:
* Dirk Fauth <dirk.fauth@gmail.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy;
import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
import org.eclipse.nebula.widgets.nattable.painter.cell.BackgroundPainter;
import org.eclipse.nebula.widgets.nattable.painter.cell.ICellPainter;
import org.eclipse.nebula.widgets.nattable.style.BorderStyle;
import org.eclipse.nebula.widgets.nattable.style.CellStyleAttributes;
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
import org.eclipse.nebula.widgets.nattable.style.HorizontalAlignmentEnum;
import org.eclipse.nebula.widgets.nattable.style.IStyle;
import org.eclipse.nebula.widgets.nattable.style.Style;
import org.eclipse.nebula.widgets.nattable.style.TextDecorationEnum;
import org.eclipse.nebula.widgets.nattable.style.VerticalAlignmentEnum;
import org.eclipse.nebula.widgets.nattable.style.theme.IThemeExtension;
import org.eclipse.nebula.widgets.nattable.style.theme.ThemeConfiguration;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
/**
* IThemeExtension that adds styling configurations for the GroupBy feature that
* comes with the GlazedLists extension.
* <p>
* Note: It is not possible to change the {@link ICellPainter} via this default
* theme configuration. The reason for this is that the implementation
* {@link GroupByHeaderPainter} contains several technical details that are
* necessary to make the GroupBy feature work as it is. Changing the painter
* could break the feature.
* </p>
* <p>
* <b>Note:</b> Simply changing the font doesn't result in automatically
* resizing the GroupBy header height. This is the same as for all other layers
* too, as for calculation of the row height, the GC is necessary. To support
* also bigger fonts in the GroupBy header region, you are able to resize the
* GroupBy header manually like this:
* </p>
*
* <pre>
* natTable.doCommand(new RowResizeCommand(groupByHeaderLayer, 0, 50));
* </pre>
*
*/
public class DefaultGroupByThemeExtension implements IThemeExtension {
// group by header background color
public Color groupByHeaderBgColor = null;
// group by item style
public Color groupByBgColor = null;
public Color groupByFgColor = null;
public Color groupByGradientBgColor = null;
public Color groupByGradientFgColor = null;
public HorizontalAlignmentEnum groupByHAlign = null;
public VerticalAlignmentEnum groupByVAlign = null;
public Font groupByFont = null;
public Image groupByImage = null;
public BorderStyle groupByBorderStyle = null;
public Character groupByPWEchoChar = null;
public TextDecorationEnum groupByTextDecoration = null;
// group by object style
public Color groupByObjectBgColor = null;
public Color groupByObjectFgColor = null;
public Color groupByObjectGradientBgColor = null;
public Color groupByObjectGradientFgColor = null;
public HorizontalAlignmentEnum groupByObjectHAlign = null;
public VerticalAlignmentEnum groupByObjectVAlign = null;
public Font groupByObjectFont = null;
public Image groupByObjectImage = null;
public BorderStyle groupByObjectBorderStyle = null;
public Character groupByObjectPWEchoChar = null;
public TextDecorationEnum groupByObjectTextDecoration = null;
public ICellPainter groupByObjectCellPainter = new BackgroundPainter(
new GroupByCellTextPainter());
// group by object style
public Color groupByObjectSelectionBgColor = null;
public Color groupByObjectSelectionFgColor = null;
public Color groupByObjectSelectionGradientBgColor = null;
public Color groupByObjectSelectionGradientFgColor = null;
public HorizontalAlignmentEnum groupByObjectSelectionHAlign = null;
public VerticalAlignmentEnum groupByObjectSelectionVAlign = null;
public Font groupByObjectSelectionFont = null;
public Image groupByObjectSelectionImage = null;
public BorderStyle groupByObjectSelectionBorderStyle = null;
public Character groupByObjectSelectionPWEchoChar = null;
public TextDecorationEnum groupByObjectSelectionTextDecoration = null;
public ICellPainter groupByObjectSelectionCellPainter = null;
// group by summary style
public Color groupBySummaryBgColor = null;
public Color groupBySummaryFgColor = null;
public Color groupBySummaryGradientBgColor = null;
public Color groupBySummaryGradientFgColor = null;
public HorizontalAlignmentEnum groupBySummaryHAlign = null;
public VerticalAlignmentEnum groupBySummaryVAlign = null;
public Font groupBySummaryFont = null;
public Image groupBySummaryImage = null;
public BorderStyle groupBySummaryBorderStyle = null;
public Character groupBySummaryPWEchoChar = null;
public TextDecorationEnum groupBySummaryTextDecoration = null;
public ICellPainter groupBySummaryCellPainter = null;
// group by summary selection style
public Color groupBySummarySelectionBgColor = null;
public Color groupBySummarySelectionFgColor = null;
public Color groupBySummarySelectionGradientBgColor = null;
public Color groupBySummarySelectionGradientFgColor = null;
public HorizontalAlignmentEnum groupBySummarySelectionHAlign = null;
public VerticalAlignmentEnum groupBySummarySelectionVAlign = null;
public Font groupBySummarySelectionFont = null;
public Image groupBySummarySelectionImage = null;
public BorderStyle groupBySummarySelectionBorderStyle = null;
public Character groupBySummarySelectionPWEchoChar = null;
public TextDecorationEnum groupBySummarySelectionTextDecoration = null;
public ICellPainter groupBySummarySelectionCellPainter = null;
// group by hint style
public String groupByHint = null;
public Color groupByHintBgColor = null;
public Color groupByHintFgColor = null;
public Color groupByHintGradientBgColor = null;
public Color groupByHintGradientFgColor = null;
public HorizontalAlignmentEnum groupByHintHAlign = null;
public VerticalAlignmentEnum groupByHintVAlign = null;
public Font groupByHintFont = null;
public Image groupByHintImage = null;
public BorderStyle groupByHintBorderStyle = null;
public Character groupByHintPWEchoChar = null;
public TextDecorationEnum groupByHintTextDecoration = null;
@Override
public void registerStyles(IConfigRegistry configRegistry) {
configureGroupByHeaderBackgroundColor(configRegistry);
configureGroupByStyle(configRegistry);
configureGroupByObjectStyle(configRegistry);
configureGroupByObjectSelectionStyle(configRegistry);
configureGroupBySummaryStyle(configRegistry);
configureGroupBySummarySelectionStyle(configRegistry);
configureGroupByHint(configRegistry);
}
/**
* Registering the background color for the GroupBy header region.
*
* @param configRegistry
* The IConfigRegistry that is used by the NatTable instance to
* which the style configuration should be applied to.
*/
protected void configureGroupByHeaderBackgroundColor(
IConfigRegistry configRegistry) {
if (getGroupByHeaderBackgroundColor() != null) {
configRegistry.registerConfigAttribute(
GroupByConfigAttributes.GROUP_BY_HEADER_BACKGROUND_COLOR,
getGroupByHeaderBackgroundColor());
}
}
/**
* Returns the {@link Color} that should be used to render the group by
* header background. If <code>null</code> is returned, the default color
* will be used.
*
* @return The {@link Color} that should be used to render group by header
* background.
*/
protected Color getGroupByHeaderBackgroundColor() {
return this.groupByHeaderBgColor;
}
/**
* Registering the style configuration for the GroupBy header region. Note
* that it is not possible to exchange the ICellPainter that is used to
* render the GroupBy header region, as it contains a lot of internal code.
*
* @param configRegistry
* The IConfigRegistry that is used by the NatTable instance to
* which the style configuration should be applied to.
*/
protected void configureGroupByStyle(IConfigRegistry configRegistry) {
IStyle groupByStyle = getGroupByStyle();
if (!ThemeConfiguration.isStyleEmpty(groupByStyle)) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_STYLE, groupByStyle,
DisplayMode.NORMAL, GroupByHeaderLayer.GROUP_BY_REGION);
}
}
/**
* Returns the {@link IStyle} that should be used to render the GroupBy
* region in a NatTable.
* <p>
* That means this {@link IStyle} is registered against
* {@link DisplayMode#NORMAL} and the configuration label
* {@link GroupByHeaderLayer#GROUP_BY_REGION}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link IStyle} that should be used to render the GroupBy
* region in a NatTable.
*/
protected IStyle getGroupByStyle() {
IStyle cellStyle = new Style();
cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR,
this.groupByBgColor);
cellStyle.setAttributeValue(CellStyleAttributes.FOREGROUND_COLOR,
this.groupByFgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_BACKGROUND_COLOR,
this.groupByGradientBgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_FOREGROUND_COLOR,
this.groupByGradientFgColor);
cellStyle.setAttributeValue(CellStyleAttributes.HORIZONTAL_ALIGNMENT,
this.groupByHAlign);
cellStyle.setAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT,
this.groupByVAlign);
cellStyle.setAttributeValue(CellStyleAttributes.FONT, this.groupByFont);
cellStyle.setAttributeValue(CellStyleAttributes.IMAGE, this.groupByImage);
cellStyle.setAttributeValue(CellStyleAttributes.BORDER_STYLE,
this.groupByBorderStyle);
cellStyle.setAttributeValue(CellStyleAttributes.PASSWORD_ECHO_CHAR,
this.groupByPWEchoChar);
cellStyle.setAttributeValue(CellStyleAttributes.TEXT_DECORATION,
this.groupByTextDecoration);
return cellStyle;
}
/**
* Registering the style configuration for the GroupBy objects.
*
* @param configRegistry
* The IConfigRegistry that is used by the NatTable instance to
* which the style configuration should be applied to.
*/
protected void configureGroupByObjectStyle(IConfigRegistry configRegistry) {
IStyle groupByObjectStyle = getGroupByObjectStyle();
if (!ThemeConfiguration.isStyleEmpty(groupByObjectStyle)) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_STYLE, groupByObjectStyle,
DisplayMode.NORMAL, GroupByDataLayer.GROUP_BY_OBJECT);
}
ICellPainter cellPainter = getGroupByObjectCellPainter();
if (cellPainter != null) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_PAINTER, cellPainter,
DisplayMode.NORMAL, GroupByDataLayer.GROUP_BY_OBJECT);
}
}
/**
* Returns the {@link IStyle} that should be used to render the GroupBy
* object rows in a NatTable.
* <p>
* That means this {@link IStyle} is registered against
* {@link DisplayMode#NORMAL} and the configuration label
* {@link GroupByDataLayer#GROUP_BY_OBJECT}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link IStyle} that should be used to render the GroupBy
* object rows in a NatTable.
*/
protected IStyle getGroupByObjectStyle() {
IStyle cellStyle = new Style();
cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR,
this.groupByObjectBgColor);
cellStyle.setAttributeValue(CellStyleAttributes.FOREGROUND_COLOR,
this.groupByObjectFgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_BACKGROUND_COLOR,
this.groupByObjectGradientBgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_FOREGROUND_COLOR,
this.groupByObjectGradientFgColor);
cellStyle.setAttributeValue(CellStyleAttributes.HORIZONTAL_ALIGNMENT,
this.groupByObjectHAlign);
cellStyle.setAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT,
this.groupByObjectVAlign);
cellStyle
.setAttributeValue(CellStyleAttributes.FONT, this.groupByObjectFont);
cellStyle.setAttributeValue(CellStyleAttributes.IMAGE,
this.groupByObjectImage);
cellStyle.setAttributeValue(CellStyleAttributes.BORDER_STYLE,
this.groupByObjectBorderStyle);
cellStyle.setAttributeValue(CellStyleAttributes.PASSWORD_ECHO_CHAR,
this.groupByObjectPWEchoChar);
cellStyle.setAttributeValue(CellStyleAttributes.TEXT_DECORATION,
this.groupByObjectTextDecoration);
return cellStyle;
}
/**
* Returns the {@link ICellPainter} that should be used to render the
* GroupBy object row cells in a NatTable. Typically you should use a
* {@link GroupByCellTextPainter} is most inner cell painter, as it is
* configured to only render group by content like group by summary and tree
* cells.
* <p>
* That means this {@link ICellPainter} is registered against
* {@link DisplayMode#NORMAL} and the configuration label
* {@link GroupByDataLayer#GROUP_BY_OBJECT}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link ICellPainter} that should be used to render the
* GroupBy object row cells in a NatTable.
*/
protected ICellPainter getGroupByObjectCellPainter() {
return this.groupByObjectCellPainter;
}
/**
* Registering the style configuration for the selected GroupBy objects.
*
* @param configRegistry
* The IConfigRegistry that is used by the NatTable instance to
* which the style configuration should be applied to.
*/
protected void configureGroupByObjectSelectionStyle(
IConfigRegistry configRegistry) {
IStyle groupByObjectStyle = getGroupByObjectSelectionStyle();
if (!ThemeConfiguration.isStyleEmpty(groupByObjectStyle)) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_STYLE, groupByObjectStyle,
DisplayMode.SELECT, GroupByDataLayer.GROUP_BY_OBJECT);
}
ICellPainter cellPainter = getGroupByObjectSelectionCellPainter();
if (cellPainter != null) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_PAINTER, cellPainter,
DisplayMode.SELECT, GroupByDataLayer.GROUP_BY_OBJECT);
}
}
/**
* Returns the {@link IStyle} that should be used to render the selected
* GroupBy object rows in a NatTable.
* <p>
* That means this {@link IStyle} is registered against
* {@link DisplayMode#SELECT} and the configuration label
* {@link GroupByDataLayer#GROUP_BY_OBJECT}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link IStyle} that should be used to render the selected
* GroupBy object rows in a NatTable.
*/
protected IStyle getGroupByObjectSelectionStyle() {
IStyle cellStyle = new Style();
cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR,
this.groupByObjectSelectionBgColor);
cellStyle.setAttributeValue(CellStyleAttributes.FOREGROUND_COLOR,
this.groupByObjectSelectionFgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_BACKGROUND_COLOR,
this.groupByObjectSelectionGradientBgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_FOREGROUND_COLOR,
this.groupByObjectSelectionGradientFgColor);
cellStyle.setAttributeValue(CellStyleAttributes.HORIZONTAL_ALIGNMENT,
this.groupByObjectSelectionHAlign);
cellStyle.setAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT,
this.groupByObjectSelectionVAlign);
cellStyle.setAttributeValue(CellStyleAttributes.FONT,
this.groupByObjectSelectionFont);
cellStyle.setAttributeValue(CellStyleAttributes.IMAGE,
this.groupByObjectSelectionImage);
cellStyle.setAttributeValue(CellStyleAttributes.BORDER_STYLE,
this.groupByObjectSelectionBorderStyle);
cellStyle.setAttributeValue(CellStyleAttributes.PASSWORD_ECHO_CHAR,
this.groupByObjectSelectionPWEchoChar);
cellStyle.setAttributeValue(CellStyleAttributes.TEXT_DECORATION,
this.groupByObjectSelectionTextDecoration);
return cellStyle;
}
/**
* Returns the {@link ICellPainter} that should be used to render the
* selected GroupBy object row cells in a NatTable. Typically you should use
* a {@link GroupByCellTextPainter} is most inner cell painter, as it is
* configured to only render group by content like group by summary and tree
* cells.
* <p>
* That means this {@link ICellPainter} is registered against
* {@link DisplayMode#SELECT} and the configuration label
* {@link GroupByDataLayer#GROUP_BY_OBJECT}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link ICellPainter} that should be used to render the
* selected GroupBy object row cells in a NatTable.
*/
protected ICellPainter getGroupByObjectSelectionCellPainter() {
return this.groupByObjectSelectionCellPainter;
}
/**
* Registering the style configuration for the GroupBy summary.
*
* @param configRegistry
* The IConfigRegistry that is used by the NatTable instance to
* which the style configuration should be applied to.
*/
protected void configureGroupBySummaryStyle(IConfigRegistry configRegistry) {
IStyle groupBySummaryStyle = getGroupBySummaryStyle();
if (!ThemeConfiguration.isStyleEmpty(groupBySummaryStyle)) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_STYLE, groupBySummaryStyle,
DisplayMode.NORMAL, GroupByDataLayer.GROUP_BY_SUMMARY);
}
ICellPainter cellPainter = getGroupBySummaryCellPainter();
if (cellPainter != null) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_PAINTER, cellPainter,
DisplayMode.NORMAL, GroupByDataLayer.GROUP_BY_SUMMARY);
}
}
/**
* Returns the {@link IStyle} that should be used to render the GroupBy row
* summary cells in a NatTable.
* <p>
* That means this {@link IStyle} is registered against
* {@link DisplayMode#NORMAL} and the configuration label
* {@link GroupByDataLayer#GROUP_BY_SUMMARY}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link IStyle} that should be used to render the GroupBy
* summary row cells in a NatTable.
*/
protected IStyle getGroupBySummaryStyle() {
IStyle cellStyle = new Style();
cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR,
this.groupBySummaryBgColor);
cellStyle.setAttributeValue(CellStyleAttributes.FOREGROUND_COLOR,
this.groupBySummaryFgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_BACKGROUND_COLOR,
this.groupBySummaryGradientBgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_FOREGROUND_COLOR,
this.groupBySummaryGradientFgColor);
cellStyle.setAttributeValue(CellStyleAttributes.HORIZONTAL_ALIGNMENT,
this.groupBySummaryHAlign);
cellStyle.setAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT,
this.groupBySummaryVAlign);
cellStyle.setAttributeValue(CellStyleAttributes.FONT,
this.groupBySummaryFont);
cellStyle.setAttributeValue(CellStyleAttributes.IMAGE,
this.groupBySummaryImage);
cellStyle.setAttributeValue(CellStyleAttributes.BORDER_STYLE,
this.groupBySummaryBorderStyle);
cellStyle.setAttributeValue(CellStyleAttributes.PASSWORD_ECHO_CHAR,
this.groupBySummaryPWEchoChar);
cellStyle.setAttributeValue(CellStyleAttributes.TEXT_DECORATION,
this.groupBySummaryTextDecoration);
return cellStyle;
}
/**
* Returns the {@link ICellPainter} that should be used to render the
* GroupBy row summary cells in a NatTable. Typically you should use a
* {@link GroupByCellTextPainter} is most inner cell painter, as it is
* configured to only render group by content like group by summary and tree
* cells.
* <p>
* That means this {@link ICellPainter} is registered against
* {@link DisplayMode#NORMAL} and the configuration label
* {@link GroupByDataLayer#GROUP_BY_SUMMARY}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link ICellPainter} that should be used to render the
* GroupBy row summary cells in a NatTable.
*/
protected ICellPainter getGroupBySummaryCellPainter() {
return this.groupBySummaryCellPainter;
}
/**
* Registering the style configuration for the selected GroupBy summary.
*
* @param configRegistry
* The IConfigRegistry that is used by the NatTable instance to
* which the style configuration should be applied to.
*/
protected void configureGroupBySummarySelectionStyle(
IConfigRegistry configRegistry) {
IStyle groupBySummaryStyle = getGroupBySummarySelectionStyle();
if (!ThemeConfiguration.isStyleEmpty(groupBySummaryStyle)) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_STYLE, groupBySummaryStyle,
DisplayMode.SELECT, GroupByDataLayer.GROUP_BY_SUMMARY);
}
ICellPainter cellPainter = getGroupBySummarySelectionCellPainter();
if (cellPainter != null) {
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_PAINTER, cellPainter,
DisplayMode.SELECT, GroupByDataLayer.GROUP_BY_SUMMARY);
}
}
/**
* Returns the {@link IStyle} that should be used to render the selected
* GroupBy row summary cells in a NatTable.
* <p>
* That means this {@link IStyle} is registered against
* {@link DisplayMode#SELECT} and the configuration label
* {@link GroupByDataLayer#GROUP_BY_SUMMARY}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link IStyle} that should be used to render the selected
* GroupBy summary row cells in a NatTable.
*/
protected IStyle getGroupBySummarySelectionStyle() {
IStyle cellStyle = new Style();
cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR,
this.groupBySummarySelectionBgColor);
cellStyle.setAttributeValue(CellStyleAttributes.FOREGROUND_COLOR,
this.groupBySummarySelectionFgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_BACKGROUND_COLOR,
this.groupBySummarySelectionGradientBgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_FOREGROUND_COLOR,
this.groupBySummarySelectionGradientFgColor);
cellStyle.setAttributeValue(CellStyleAttributes.HORIZONTAL_ALIGNMENT,
this.groupBySummarySelectionHAlign);
cellStyle.setAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT,
this.groupBySummarySelectionVAlign);
cellStyle.setAttributeValue(CellStyleAttributes.FONT,
this.groupBySummarySelectionFont);
cellStyle.setAttributeValue(CellStyleAttributes.IMAGE,
this.groupBySummarySelectionImage);
cellStyle.setAttributeValue(CellStyleAttributes.BORDER_STYLE,
this.groupBySummarySelectionBorderStyle);
cellStyle.setAttributeValue(CellStyleAttributes.PASSWORD_ECHO_CHAR,
this.groupBySummarySelectionPWEchoChar);
cellStyle.setAttributeValue(CellStyleAttributes.TEXT_DECORATION,
this.groupBySummarySelectionTextDecoration);
return cellStyle;
}
/**
* Returns the {@link ICellPainter} that should be used to render the
* selected GroupBy row summary cells in a NatTable. Typically you should
* use a {@link GroupByCellTextPainter} is most inner cell painter, as it is
* configured to only render group by content like group by summary and tree
* cells.
* <p>
* That means this {@link ICellPainter} is registered against
* {@link DisplayMode#SELECT} and the configuration label
* {@link GroupByDataLayer#GROUP_BY_SUMMARY}.
* </p>
* <p>
* If this method returns <code>null</code>, no value will be registered to
* keep the IConfigRegistry clean. The result would be the same, as if no
* value is found in the IConfigRegistry. In this case the rendering will
* fallback to the default configuration.
* </p>
*
* @return The {@link ICellPainter} that should be used to render the
* selected GroupBy row summary cells in a NatTable.
*/
protected ICellPainter getGroupBySummarySelectionCellPainter() {
return this.groupBySummarySelectionCellPainter;
}
/**
* Method to configure the styling of the GroupBy hint in the GroupBy
* header.
* <p>
* The GroupBy hint is usually rendered by the GroupByHeaderPainter. If you
* registered a different {@link ICellPainter} for the GroupByHeaderLayer,
* this might not be interpreted.
* </p>
*
* @param configRegistry
* The IConfigRegistry that is used by the NatTable instance to
* which the style configuration should be applied to.
*/
protected void configureGroupByHint(IConfigRegistry configRegistry) {
String groupByHint = getGroupByHint();
if (groupByHint != null && groupByHint.length() > 0) {
configRegistry.registerConfigAttribute(
GroupByConfigAttributes.GROUP_BY_HINT, groupByHint);
}
IStyle hintStyle = getGroupByHintStyle();
if (!ThemeConfiguration.isStyleEmpty(hintStyle)) {
configRegistry.registerConfigAttribute(
GroupByConfigAttributes.GROUP_BY_HINT_STYLE, hintStyle);
}
}
/**
* @return The hint that should be rendered in case there is no grouping
* applied.
*/
protected String getGroupByHint() {
return this.groupByHint;
}
/**
* @return The {@link IStyle} that should be used to render the GroupBy
* hint.
*/
protected IStyle getGroupByHintStyle() {
IStyle cellStyle = new Style();
cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR,
this.groupByHintBgColor);
cellStyle.setAttributeValue(CellStyleAttributes.FOREGROUND_COLOR,
this.groupByHintFgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_BACKGROUND_COLOR,
this.groupByHintGradientBgColor);
cellStyle.setAttributeValue(
CellStyleAttributes.GRADIENT_FOREGROUND_COLOR,
this.groupByHintGradientFgColor);
cellStyle.setAttributeValue(CellStyleAttributes.HORIZONTAL_ALIGNMENT,
this.groupByHintHAlign);
cellStyle.setAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT,
this.groupByHintVAlign);
cellStyle.setAttributeValue(CellStyleAttributes.FONT, this.groupByHintFont);
cellStyle
.setAttributeValue(CellStyleAttributes.IMAGE, this.groupByHintImage);
cellStyle.setAttributeValue(CellStyleAttributes.BORDER_STYLE,
this.groupByHintBorderStyle);
cellStyle.setAttributeValue(CellStyleAttributes.PASSWORD_ECHO_CHAR,
this.groupByHintPWEchoChar);
cellStyle.setAttributeValue(CellStyleAttributes.TEXT_DECORATION,
this.groupByHintTextDecoration);
return cellStyle;
}
@Override
public void unregisterStyles(IConfigRegistry configRegistry) {
if (getGroupByHeaderBackgroundColor() != null) {
configRegistry
.unregisterConfigAttribute(GroupByConfigAttributes.GROUP_BY_HEADER_BACKGROUND_COLOR);
}
if (!ThemeConfiguration.isStyleEmpty(getGroupByStyle()))
configRegistry.unregisterConfigAttribute(
CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL,
GroupByHeaderLayer.GROUP_BY_REGION);
String groupByHint = getGroupByHint();
if (groupByHint != null && groupByHint.length() > 0)
configRegistry.unregisterConfigAttribute(
GroupByConfigAttributes.GROUP_BY_HINT, groupByHint);
if (!ThemeConfiguration.isStyleEmpty(getGroupByObjectStyle()))
configRegistry.unregisterConfigAttribute(
CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL,
GroupByDataLayer.GROUP_BY_OBJECT);
if (getGroupByObjectCellPainter() != null)
configRegistry.unregisterConfigAttribute(
CellConfigAttributes.CELL_PAINTER, DisplayMode.NORMAL,
GroupByDataLayer.GROUP_BY_OBJECT);
if (!ThemeConfiguration.isStyleEmpty(getGroupBySummaryStyle()))
configRegistry.unregisterConfigAttribute(
CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL,
GroupByDataLayer.GROUP_BY_SUMMARY);
if (getGroupBySummaryCellPainter() != null)
configRegistry.unregisterConfigAttribute(
CellConfigAttributes.CELL_PAINTER, DisplayMode.NORMAL,
GroupByDataLayer.GROUP_BY_SUMMARY);
if (!ThemeConfiguration.isStyleEmpty(getGroupByHintStyle()))
configRegistry
.unregisterConfigAttribute(GroupByConfigAttributes.GROUP_BY_HINT_STYLE);
}
}