blob: 2ab93f95b6b2619f4bdc43a2b4010b4e29600b56 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2015, 2020 CEA LIST and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Dirk Fauth <dirk.fauth@googlemail.com> - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.nebula.widgets.nattable.extension.e4.css;
import java.net.URI;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.e4.ui.css.core.css2.CSS2FontPropertiesHelpers;
import org.eclipse.e4.ui.css.core.dom.CSSStylableElement;
import org.eclipse.e4.ui.css.core.dom.properties.Gradient;
import org.eclipse.e4.ui.css.core.dom.properties.ICSSPropertyHandler;
import org.eclipse.e4.ui.css.core.dom.properties.ICSSPropertyHandler2;
import org.eclipse.e4.ui.css.core.dom.properties.converters.ICSSValueConverter;
import org.eclipse.e4.ui.css.core.dom.properties.css2.CSS2FontProperties;
import org.eclipse.e4.ui.css.core.engine.CSSElementContext;
import org.eclipse.e4.ui.css.core.engine.CSSEngine;
import org.eclipse.e4.ui.css.core.util.resources.IResourcesLocatorManager;
import org.eclipse.e4.ui.css.swt.helpers.CSSSWTFontHelper;
import org.eclipse.e4.ui.css.swt.properties.converters.CSSValueSWTGradientConverterImpl;
import org.eclipse.e4.ui.css.swt.properties.css2.CSSPropertyBackgroundSWTHandler;
import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
import org.eclipse.nebula.widgets.nattable.data.convert.IDisplayConverter;
import org.eclipse.nebula.widgets.nattable.edit.EditConfigAttributes;
import org.eclipse.nebula.widgets.nattable.extension.e4.painterfactory.CellPainterFactory;
import org.eclipse.nebula.widgets.nattable.fillhandle.config.FillHandleConfigAttributes;
import org.eclipse.nebula.widgets.nattable.freeze.FreezeConfigAttributes;
import org.eclipse.nebula.widgets.nattable.hideshow.indicator.HideIndicatorConfigAttributes;
import org.eclipse.nebula.widgets.nattable.painter.IOverlayPainter;
import org.eclipse.nebula.widgets.nattable.painter.NatTableBorderOverlayPainter;
import org.eclipse.nebula.widgets.nattable.painter.cell.AbstractTextPainter;
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.VerticalTextPainter;
import org.eclipse.nebula.widgets.nattable.painter.cell.decorator.PaddingDecorator;
import org.eclipse.nebula.widgets.nattable.painter.cell.decorator.PercentageBarDecorator;
import org.eclipse.nebula.widgets.nattable.resize.command.ColumnSizeConfigurationCommand;
import org.eclipse.nebula.widgets.nattable.resize.command.RowSizeConfigurationCommand;
import org.eclipse.nebula.widgets.nattable.style.BorderStyle;
import org.eclipse.nebula.widgets.nattable.style.BorderStyle.BorderModeEnum;
import org.eclipse.nebula.widgets.nattable.style.BorderStyle.LineStyleEnum;
import org.eclipse.nebula.widgets.nattable.style.CellStyleAttributes;
import org.eclipse.nebula.widgets.nattable.style.ConfigAttribute;
import org.eclipse.nebula.widgets.nattable.style.HorizontalAlignmentEnum;
import org.eclipse.nebula.widgets.nattable.style.IStyle;
import org.eclipse.nebula.widgets.nattable.style.TextDecorationEnum;
import org.eclipse.nebula.widgets.nattable.style.VerticalAlignmentEnum;
import org.eclipse.nebula.widgets.nattable.tree.config.TreeConfigAttributes;
import org.eclipse.nebula.widgets.nattable.ui.util.CellEdgeEnum;
import org.eclipse.nebula.widgets.nattable.util.GUIHelper;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.w3c.dom.css.CSSPrimitiveValue;
import org.w3c.dom.css.CSSValue;
import org.w3c.dom.css.CSSValueList;
@SuppressWarnings("restriction")
public class NatTableCSSHandler implements ICSSPropertyHandler, ICSSPropertyHandler2 {
@Override
public boolean applyCSSProperty(Object element, String property, CSSValue value, String pseudo, CSSEngine engine)
throws Exception {
Object control = null;
if (element instanceof CSSStylableElement) {
CSSStylableElement elt = (CSSStylableElement) element;
control = elt.getNativeWidget();
}
NatTable natTable = null;
String label = null;
String displayMode = NatTableCSSHelper.getDisplayMode(pseudo);
CSSElementContext context = null;
CSSElementContext natTableContext = null;
if (control instanceof NatTable) {
natTable = (NatTable) control;
} else if (control instanceof NatTableWrapper) {
natTable = ((NatTableWrapper) control).getNatTable();
label = ((NatTableWrapper) control).getLabel();
natTableContext = engine.getCSSElementContext(natTable);
}
if (natTable != null) {
context = engine.getCSSElementContext(control);
boolean resolvePainter = NatTableCSSHelper.resolvePainter(context, natTableContext, displayMode);
// check property
if (NatTableCSSConstants.PAINTER_RESOLUTION.equalsIgnoreCase(property)) {
NatTableCSSHelper.storeContextValue(
context,
displayMode,
NatTableCSSConstants.PAINTER_RESOLUTION,
NatTableCSSHelper.getBoolean(value, true));
} else if (NatTableCSSConstants.PAINTER.equalsIgnoreCase(property)) {
NatTableCSSHelper.storeContextValue(
context,
displayMode,
NatTableCSSConstants.PAINTER,
NatTableCSSHelper.resolvePainterRepresentation(value));
} else if (NatTableCSSConstants.BACKGROUND_COLOR.equalsIgnoreCase(property)) {
CSSPropertyBackgroundSWTHandler.INSTANCE.applyCSSPropertyBackgroundColor(element, value, pseudo, engine);
} else if (NatTableCSSConstants.BACKGROUND_IMAGE.equalsIgnoreCase(property)) {
CSSPropertyBackgroundSWTHandler.INSTANCE.applyCSSPropertyBackgroundImage(element, value, pseudo, engine);
} else if (NatTableCSSConstants.CELL_BACKGROUND_COLOR.equalsIgnoreCase(property)) {
if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
Color newColor = (Color) engine.convert(value, Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.BACKGROUND_COLOR,
newColor,
displayMode,
label);
if (resolvePainter) {
NatTableCSSHelper.storeContextValue(
context,
displayMode,
NatTableCSSConstants.CV_BACKGROUND_PAINTER,
CellPainterFactory.BACKGROUND_PAINTER_KEY);
}
} else if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
Gradient grad = (Gradient) CSSValueSWTGradientConverterImpl.INSTANCE.convert(value, engine, natTable.getDisplay());
if (grad != null) {
List<?> values = grad.getValues();
if (values.size() == 2) {
Color background = (Color) engine.convert(
(CSSPrimitiveValue) values.get(0), Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.GRADIENT_BACKGROUND_COLOR,
background,
displayMode,
label);
Color foreground = (Color) engine.convert(
(CSSPrimitiveValue) values.get(1), Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.GRADIENT_FOREGROUND_COLOR,
foreground,
displayMode,
label);
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.GRADIENT_BACKGROUND_VERTICAL, grad.getVerticalGradient());
if (resolvePainter) {
NatTableCSSHelper.storeContextValue(
context,
displayMode,
NatTableCSSConstants.CV_BACKGROUND_PAINTER,
CellPainterFactory.GRADIENT_BACKGROUND_PAINTER_KEY);
}
}
}
}
} else if (NatTableCSSConstants.CELL_BACKGROUND_IMAGE.equalsIgnoreCase(property)) {
Image image = (Image) engine.convert(value, Image.class, natTable.getDisplay());
if (image != null) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.CELL_BACKGROUND_IMAGE, image);
if (resolvePainter) {
NatTableCSSHelper.storeContextValue(
context,
displayMode,
NatTableCSSConstants.CV_BACKGROUND_PAINTER,
CellPainterFactory.BACKGROUND_IMAGE_PAINTER_KEY);
}
}
} else if (NatTableCSSConstants.FOREGROUND_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
Color newColor = (Color) engine.convert(value, Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.FOREGROUND_COLOR,
newColor,
displayMode,
label);
} else if (NatTableCSSConstants.HORIZONTAL_ALIGNMENT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
String stringValue = value.getCssText().toLowerCase();
HorizontalAlignmentEnum align = HorizontalAlignmentEnum.CENTER;
if ("left".equals(stringValue)
|| "lead".equals(stringValue)) {
align = HorizontalAlignmentEnum.LEFT;
} else if ("right".equals(stringValue)
|| "trail".equals(stringValue)) {
align = HorizontalAlignmentEnum.RIGHT;
} else if ("center".equals(stringValue)) {
align = HorizontalAlignmentEnum.CENTER;
}
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.HORIZONTAL_ALIGNMENT,
align,
displayMode,
label);
} else if (NatTableCSSConstants.VERTICAL_ALIGNMENT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
String stringValue = value.getCssText().toLowerCase();
VerticalAlignmentEnum align = VerticalAlignmentEnum.MIDDLE;
if ("top".equals(stringValue)
|| "up".equals(stringValue)) {
align = VerticalAlignmentEnum.TOP;
} else if ("bottom".equals(stringValue)
|| "down".equals(stringValue)) {
align = VerticalAlignmentEnum.BOTTOM;
} else if ("middle".equals(stringValue)) {
align = VerticalAlignmentEnum.MIDDLE;
}
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.VERTICAL_ALIGNMENT,
align,
displayMode,
label);
} else if (NatTableCSSConstants.FONT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_VALUE_LIST)) {
NatTableCSSHelper.setFontProperties(
(CSSValueList) value,
NatTableCSSHelper.getFontProperties(context, CSS2FontPropertiesHelpers.CSS2FONT_KEY, natTable, displayMode, label));
} else if (NatTableCSSConstants.FONT_FAMILY.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font =
NatTableCSSHelper.getFontProperties(context, CSS2FontPropertiesHelpers.CSS2FONT_KEY, natTable, displayMode, label);
font.setFamily((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.FONT_SIZE.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font =
NatTableCSSHelper.getFontProperties(context, CSS2FontPropertiesHelpers.CSS2FONT_KEY, natTable, displayMode, label);
font.setSize((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.FONT_STYLE.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font =
NatTableCSSHelper.getFontProperties(context, CSS2FontPropertiesHelpers.CSS2FONT_KEY, natTable, displayMode, label);
font.setStyle((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.FONT_WEIGHT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font =
NatTableCSSHelper.getFontProperties(context, CSS2FontPropertiesHelpers.CSS2FONT_KEY, natTable, displayMode, label);
font.setWeight((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.IMAGE.equalsIgnoreCase(property)) {
Image image = (Image) engine.convert(value, Image.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.IMAGE,
image,
displayMode,
label);
if (resolvePainter) {
NatTableCSSHelper.storeContextValue(
context,
displayMode,
NatTableCSSConstants.CV_CONTENT_PAINTER,
CellPainterFactory.IMAGE_PAINTER_KEY);
}
} else if (NatTableCSSConstants.BORDER.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_VALUE_LIST)) {
CSSValueList valueList = (CSSValueList) value;
BorderStyle borderStyle = NatTableCSSHelper.getBorderStyle(context, displayMode);
NatTableCSSHelper.storeBorderStyle(valueList, borderStyle, engine, natTable.getDisplay());
} else if (NatTableCSSConstants.BORDER_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
BorderStyle borderStyle = NatTableCSSHelper.getBorderStyle(context, displayMode);
borderStyle.setColor((Color) engine.convert(value, Color.class, natTable.getDisplay()));
} else if (NatTableCSSConstants.BORDER_STYLE.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
BorderStyle borderStyle = NatTableCSSHelper.getBorderStyle(context, displayMode);
CSSPrimitiveValue primitiveValue = (CSSPrimitiveValue) value;
borderStyle.setLineStyle(
LineStyleEnum.valueOf(primitiveValue.getStringValue().toUpperCase()));
} else if (NatTableCSSConstants.BORDER_WIDTH.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
BorderStyle borderStyle = NatTableCSSHelper.getBorderStyle(context, displayMode);
borderStyle.setThickness(
(int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PT));
} else if (NatTableCSSConstants.BORDER_MODE.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
BorderStyle borderStyle = NatTableCSSHelper.getBorderStyle(context, displayMode);
CSSPrimitiveValue primitiveValue = (CSSPrimitiveValue) value;
borderStyle.setBorderMode(
BorderModeEnum.valueOf(primitiveValue.getStringValue().toUpperCase()));
} else if (NatTableCSSConstants.PASSWORD_ECHO_CHAR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
String stringValue = value.getCssText();
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.PASSWORD_ECHO_CHAR,
stringValue.charAt(0),
displayMode,
label);
} else if (NatTableCSSConstants.TEXT_DECORATION.equalsIgnoreCase(property)) {
if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
String stringValue = value.getCssText();
if ("none".equals(stringValue)) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.TEXT_DECORATION,
null,
displayMode,
label);
} else if ("underline".equals(stringValue)) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.TEXT_DECORATION,
TextDecorationEnum.UNDERLINE,
displayMode,
label);
} else if ("line-through".equals(stringValue)) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.TEXT_DECORATION,
TextDecorationEnum.STRIKETHROUGH,
displayMode,
label);
}
} else if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
CSSValueList valueList = (CSSValueList) value;
int length = valueList.getLength();
boolean strikethrough = false;
boolean underline = false;
for (int i = 0; i < length; i++) {
CSSValue value2 = valueList.item(i);
if (value2.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
String stringValue = value2.getCssText();
if ("none".equals(stringValue)) {
strikethrough = false;
underline = false;
break;
} else if ("underline".equals(stringValue)) {
underline = true;
} else if ("line-through".equals(stringValue)) {
strikethrough = true;
}
}
}
if (!strikethrough && !underline) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.TEXT_DECORATION,
null,
displayMode,
label);
} else if (!strikethrough && underline) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.TEXT_DECORATION,
TextDecorationEnum.UNDERLINE,
displayMode,
label);
} else if (strikethrough && !underline) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.TEXT_DECORATION,
TextDecorationEnum.STRIKETHROUGH,
displayMode,
label);
} else if (strikethrough && underline) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.TEXT_DECORATION,
TextDecorationEnum.UNDERLINE_STRIKETHROUGH,
displayMode,
label);
}
}
} else if (NatTableCSSConstants.FREEZE_SEPARATOR_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
natTable.getConfigRegistry().registerConfigAttribute(
FreezeConfigAttributes.SEPARATOR_COLOR,
(Color) engine.convert(value, Color.class, natTable.getDisplay()),
displayMode,
label);
} else if (NatTableCSSConstants.FREEZE_SEPARATOR_WIDTH.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
natTable.getConfigRegistry().registerConfigAttribute(
FreezeConfigAttributes.SEPARATOR_WIDTH,
(int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PT),
displayMode,
label);
} else if (NatTableCSSConstants.GRID_LINE_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.GRID_LINE_COLOR,
(Color) engine.convert(value, Color.class, natTable.getDisplay()),
displayMode,
label);
} else if (NatTableCSSConstants.GRID_LINE_WIDTH.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.GRID_LINE_WIDTH,
(int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PT),
displayMode,
label);
} else if (NatTableCSSConstants.RENDER_GRID_LINES.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.RENDER_GRID_LINES,
NatTableCSSHelper.getBoolean(value, true),
displayMode,
label);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_VALUE_LIST)) {
NatTableCSSHelper.setFontProperties(
(CSSValueList) value,
NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_CONVERSION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label));
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT_FAMILY.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font = NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_CONVERSION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label);
font.setFamily((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT_SIZE.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font = NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_CONVERSION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label);
font.setSize((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT_STYLE.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font = NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_CONVERSION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label);
font.setStyle((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT_WEIGHT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font = NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_CONVERSION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label);
font.setWeight((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.CONVERSION_ERROR_BACKGROUND_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
Color newColor = (Color) engine.convert(value, Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
EditConfigAttributes.CONVERSION_ERROR_STYLE,
CellStyleAttributes.BACKGROUND_COLOR,
newColor,
displayMode,
label);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FOREGROUND_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
Color newColor = (Color) engine.convert(value, Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
EditConfigAttributes.CONVERSION_ERROR_STYLE,
CellStyleAttributes.FOREGROUND_COLOR,
newColor,
displayMode,
label);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_VALUE_LIST)) {
NatTableCSSHelper.setFontProperties(
(CSSValueList) value,
NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_VALIDATION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label));
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT_FAMILY.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font = NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_VALIDATION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label);
font.setFamily((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT_SIZE.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font = NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_VALIDATION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label);
font.setSize((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT_STYLE.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font = NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_VALIDATION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label);
font.setStyle((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT_WEIGHT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSS2FontProperties font = NatTableCSSHelper.getFontProperties(
context,
NatTableCSSConstants.CV_VALIDATION_ERROR_FONT_PROPERTIES,
natTable,
displayMode,
label);
font.setWeight((CSSPrimitiveValue) value);
} else if (NatTableCSSConstants.VALIDATION_ERROR_BACKGROUND_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
Color newColor = (Color) engine.convert(value, Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
EditConfigAttributes.VALIDATION_ERROR_STYLE,
CellStyleAttributes.BACKGROUND_COLOR,
newColor,
displayMode,
label);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FOREGROUND_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
Color newColor = (Color) engine.convert(value, Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
EditConfigAttributes.VALIDATION_ERROR_STYLE,
CellStyleAttributes.FOREGROUND_COLOR,
newColor,
displayMode,
label);
} else if (NatTableCSSConstants.WORD_WRAP.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.WORD_WRAP, NatTableCSSHelper.getBoolean(value, false));
} else if (NatTableCSSConstants.TEXT_WRAP.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.TEXT_WRAP, NatTableCSSHelper.getBoolean(value, false));
} else if (NatTableCSSConstants.TEXT_TRIM.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.TEXT_TRIM, NatTableCSSHelper.getBoolean(value, true));
} else if (NatTableCSSConstants.TEXT_DIRECTION.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.TEXT_DIRECTION, value.getCssText());
} else if (NatTableCSSConstants.LINE_SPACING.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.LINE_SPACING, (int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PT));
} else if (NatTableCSSConstants.COLUMN_WIDTH.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSSPrimitiveValue primitiveValue = (CSSPrimitiveValue) value;
short type = primitiveValue.getPrimitiveType();
switch (type) {
case CSSPrimitiveValue.CSS_IDENT:
if ("auto".equalsIgnoreCase(value.getCssText())) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.CALCULATE_CELL_WIDTH, true);
} else if ("percentage".equalsIgnoreCase(value.getCssText())) {
// set column percentage sizing
natTable.doCommand(new ColumnSizeConfigurationCommand(label, null, true));
}
break;
case CSSPrimitiveValue.CSS_PERCENTAGE:
// set column percentage sizing
int percentage = (int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PERCENTAGE);
natTable.doCommand(new ColumnSizeConfigurationCommand(label, percentage, true));
break;
case CSSPrimitiveValue.CSS_PT:
case CSSPrimitiveValue.CSS_NUMBER:
case CSSPrimitiveValue.CSS_PX:
// set column width by label
int width = (int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PT);
natTable.doCommand(new ColumnSizeConfigurationCommand(label, width, false));
break;
}
} else if (NatTableCSSConstants.ROW_HEIGHT.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
CSSPrimitiveValue primitiveValue = (CSSPrimitiveValue) value;
short type = primitiveValue.getPrimitiveType();
switch (type) {
case CSSPrimitiveValue.CSS_IDENT:
if ("auto".equalsIgnoreCase(value.getCssText())) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.CALCULATE_CELL_HEIGHT, true);
} else if ("percentage".equalsIgnoreCase(value.getCssText())) {
// set column percentage sizing
natTable.doCommand(new RowSizeConfigurationCommand(label, null, true));
}
break;
case CSSPrimitiveValue.CSS_PERCENTAGE:
// set column percentage sizing
int percentage = (int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PERCENTAGE);
natTable.doCommand(new RowSizeConfigurationCommand(label, percentage, true));
break;
case CSSPrimitiveValue.CSS_PT:
case CSSPrimitiveValue.CSS_NUMBER:
case CSSPrimitiveValue.CSS_PX:
// set column width by label
int width = (int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PT);
natTable.doCommand(new RowSizeConfigurationCommand(label, width, false));
break;
}
} else if (NatTableCSSConstants.CONVERTER.equalsIgnoreCase(property)) {
if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
if (NatTableCSSHelper.isConverterString(value.getCssText())) {
natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.DISPLAY_CONVERTER,
NatTableCSSHelper.getDisplayConverter(
value.getCssText(),
true,
null,
null,
null),
displayMode,
label);
}
} else if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
String converterKey = null;
boolean format = true;
Integer minFractionDigits = null;
Integer maxFractionDigits = null;
String pattern = null;
CSSValueList valueList = (CSSValueList) value;
int length = valueList.getLength();
for (int i = 0; i < length; i++) {
CSSValue value2 = valueList.item(i);
if (value2.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
CSSPrimitiveValue primitiveValue = (CSSPrimitiveValue) value2;
short type = primitiveValue.getPrimitiveType();
switch (type) {
case CSSPrimitiveValue.CSS_IDENT:
if (NatTableCSSHelper.isConverterString(primitiveValue.getCssText())) {
converterKey = primitiveValue.getCssText();
} else if ("true".equals(primitiveValue.getCssText())
|| "false".equals(primitiveValue.getCssText())) {
format = NatTableCSSHelper.getBoolean(primitiveValue, true);
}
break;
case CSSPrimitiveValue.CSS_STRING:
pattern = primitiveValue.getCssText();
break;
case CSSPrimitiveValue.CSS_PT:
case CSSPrimitiveValue.CSS_NUMBER:
case CSSPrimitiveValue.CSS_PX:
if (minFractionDigits == null) {
minFractionDigits = (int) primitiveValue.getFloatValue(CSSPrimitiveValue.CSS_PT);
} else {
maxFractionDigits = (int) primitiveValue.getFloatValue(CSSPrimitiveValue.CSS_PT);
}
break;
}
}
}
if (converterKey != null) {
natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.DISPLAY_CONVERTER,
NatTableCSSHelper.getDisplayConverter(
converterKey,
format,
minFractionDigits,
maxFractionDigits,
pattern),
displayMode,
label);
}
}
} else if (NatTableCSSConstants.PADDING.equalsIgnoreCase(property)) {
if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_TOP, value, context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_RIGHT, value, context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_BOTTOM, value, context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_LEFT, value, context, displayMode);
} else if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
CSSValueList valueList = (CSSValueList) value;
int length = valueList.getLength();
if (length == 4) {
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_TOP, valueList.item(0), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_RIGHT, valueList.item(1), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_BOTTOM, valueList.item(2), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_LEFT, valueList.item(3), context, displayMode);
} else if (length == 3) {
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_TOP, valueList.item(0), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_RIGHT, valueList.item(1), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_BOTTOM, valueList.item(2), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_LEFT, valueList.item(1), context, displayMode);
} else if (length == 2) {
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_TOP, valueList.item(0), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_RIGHT, valueList.item(1), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_BOTTOM, valueList.item(0), context, displayMode);
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_LEFT, valueList.item(1), context, displayMode);
}
}
} else if (NatTableCSSConstants.PADDING_TOP.equalsIgnoreCase(property)) {
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_TOP, value, context, displayMode);
} else if (NatTableCSSConstants.PADDING_RIGHT.equalsIgnoreCase(property)) {
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_RIGHT, value, context, displayMode);
} else if (NatTableCSSConstants.PADDING_BOTTOM.equalsIgnoreCase(property)) {
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_BOTTOM, value, context, displayMode);
} else if (NatTableCSSConstants.PADDING_LEFT.equalsIgnoreCase(property)) {
NatTableCSSHelper.storePadding(NatTableCSSConstants.PADDING_LEFT, value, context, displayMode);
} else if (NatTableCSSConstants.TABLE_BORDER_COLOR.equals(property)
&& value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
// remove any prior configured NatTableBorderOverlayPainter
for (Iterator<IOverlayPainter> it = natTable.getOverlayPainters().iterator(); it.hasNext();) {
IOverlayPainter painter = it.next();
if (painter instanceof NatTableBorderOverlayPainter) {
it.remove();
}
}
// add the new NatTableBorderOverlayPainter
if ("auto".equalsIgnoreCase(value.getCssText())) {
natTable.addOverlayPainter(new NatTableBorderOverlayPainter(true, natTable.getConfigRegistry()));
} else {
Color newColor = (Color) engine.convert(value, Color.class, natTable.getDisplay());
natTable.addOverlayPainter(new NatTableBorderOverlayPainter(newColor, true));
}
} else if (NatTableCSSConstants.FILL_HANDLE_BORDER.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_VALUE_LIST)) {
CSSValueList valueList = (CSSValueList) value;
BorderStyle borderStyle = new BorderStyle();
NatTableCSSHelper.storeBorderStyle(valueList, borderStyle, engine, natTable.getDisplay());
natTable.getConfigRegistry().registerConfigAttribute(
FillHandleConfigAttributes.FILL_HANDLE_BORDER_STYLE,
borderStyle);
} else if (NatTableCSSConstants.FILL_HANDLE_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
natTable.getConfigRegistry().registerConfigAttribute(
FillHandleConfigAttributes.FILL_HANDLE_COLOR,
(Color) engine.convert(value, Color.class, natTable.getDisplay()));
} else if (NatTableCSSConstants.FILL_REGION_BORDER.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_VALUE_LIST)) {
CSSValueList valueList = (CSSValueList) value;
BorderStyle borderStyle = new BorderStyle();
NatTableCSSHelper.storeBorderStyle(valueList, borderStyle, engine, natTable.getDisplay());
natTable.getConfigRegistry().registerConfigAttribute(
FillHandleConfigAttributes.FILL_HANDLE_REGION_BORDER_STYLE,
borderStyle);
} else if (NatTableCSSConstants.DECORATION.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_VALUE_LIST)) {
CSSValueList valueList = (CSSValueList) value;
int length = valueList.getLength();
for (int i = 0; i < length; i++) {
CSSValue value2 = valueList.item(i);
if (value2.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
CSSPrimitiveValue primitiveValue = (CSSPrimitiveValue) value2;
short type = primitiveValue.getPrimitiveType();
switch (type) {
case CSSPrimitiveValue.CSS_IDENT:
if ("true".equalsIgnoreCase(value2.getCssText())
|| "false".equalsIgnoreCase(value2.getCssText())) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.PAINT_DECORATION_DEPENDENT,
NatTableCSSHelper.getBoolean(value2, true));
} else {
CellEdgeEnum edge = NatTableCSSHelper.getCellEdgeEnum(value2.getCssText());
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.DECORATOR_EDGE, edge);
}
break;
case CSSPrimitiveValue.CSS_URI:
// first try to resolve the image using NatTable
// GUIHelper to support scaling
Image image = null;
try {
IResourcesLocatorManager manager = engine.getResourcesLocatorManager();
String resolved = manager.resolve(primitiveValue.getStringValue());
image = GUIHelper.getImageByURL(new URI(resolved).toURL());
} catch (Exception e) {
// something went wrong with loading the
// image by URL try to use the CSSEngine
image = (Image) engine.convert(value2, Image.class, natTable.getDisplay());
}
if (image != null) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.DECORATOR_IMAGE, image);
}
break;
case CSSPrimitiveValue.CSS_PT:
case CSSPrimitiveValue.CSS_NUMBER:
case CSSPrimitiveValue.CSS_PX:
int spacing = (int) ((CSSPrimitiveValue) value2).getFloatValue(CSSPrimitiveValue.CSS_PT);
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.DECORATOR_SPACING, spacing);
break;
}
}
}
List<String> decoratorKeys = NatTableCSSHelper.getDecoratorPainter(context, displayMode);
if (!decoratorKeys.contains(CellPainterFactory.DECORATOR_KEY)) {
decoratorKeys.add(CellPainterFactory.DECORATOR_KEY);
}
} else if (NatTableCSSConstants.INVERT_ICONS.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
NatTableCSSHelper
.getPainterProperties(context, displayMode)
.put(NatTableCSSConstants.INVERT_ICONS, NatTableCSSHelper.getBoolean(value, false));
} else if (NatTableCSSConstants.PERCENTAGE_DECORATOR_COLORS.equalsIgnoreCase(property)) {
if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
Color newColor = (Color) engine.convert(value, Color.class, natTable.getDisplay());
NatTableCSSHelper.applyNatTableStyle(
natTable,
PercentageBarDecorator.PERCENTAGE_BAR_COMPLETE_REGION_START_COLOR,
newColor,
displayMode,
label);
} else if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
CSSValueList valueList = (CSSValueList) value;
int length = valueList.getLength();
for (int i = 0; i < length; i++) {
CSSValue value2 = valueList.item(i);
if (value2.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
Color newColor = (Color) engine.convert(value2, Color.class, natTable.getDisplay());
ConfigAttribute<Color> percentageConfig = null;
switch (i) {
case 0:
percentageConfig = PercentageBarDecorator.PERCENTAGE_BAR_COMPLETE_REGION_START_COLOR;
break;
case 1:
percentageConfig = PercentageBarDecorator.PERCENTAGE_BAR_COMPLETE_REGION_END_COLOR;
break;
case 2:
percentageConfig = PercentageBarDecorator.PERCENTAGE_BAR_INCOMPLETE_REGION_COLOR;
break;
}
if (percentageConfig != null) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
percentageConfig,
newColor,
displayMode,
label);
}
}
}
}
} else if (NatTableCSSConstants.TREE_STRUCTURE_PAINTER.equalsIgnoreCase(property)) {
List<String> painterValues = NatTableCSSHelper.resolvePainterRepresentation(value);
Map<String, Object> painterProperties =
NatTableCSSHelper.getPainterPropertiesInherited(context, natTableContext, displayMode);
// ensure that the last value in the element is not a content
// painter
if (CellPainterFactory.getInstance().isContentPainterKey(painterValues.get(painterValues.size() - 1))) {
painterValues.remove(painterValues.size() - 1);
}
// add none to the end to ensure that the content painter is
// resolved dynamically by the TreeLayer
painterValues.add(CellPainterFactory.NONE);
ICellPainter painter = CellPainterFactory.getInstance().getCellPainter(painterValues, painterProperties);
if (painter != null) {
natTable.getConfigRegistry().registerConfigAttribute(
TreeConfigAttributes.TREE_STRUCTURE_PAINTER,
painter,
displayMode);
}
} else if (NatTableCSSConstants.HIDE_INDICATOR_COLOR.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
natTable.getConfigRegistry().registerConfigAttribute(
HideIndicatorConfigAttributes.HIDE_INDICATOR_COLOR,
(Color) engine.convert(value, Color.class, natTable.getDisplay()),
displayMode,
label);
} else if (NatTableCSSConstants.HIDE_INDICATOR_WIDTH.equalsIgnoreCase(property)
&& (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE)) {
natTable.getConfigRegistry().registerConfigAttribute(
HideIndicatorConfigAttributes.HIDE_INDICATOR_LINE_WIDTH,
(int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PT),
displayMode,
label);
}
return true;
}
return false;
}
@Override
public String retrieveCSSProperty(Object control, String property, String pseudo, CSSEngine engine)
throws Exception {
NatTable natTable = null;
String label = null;
String displayMode = NatTableCSSHelper.getDisplayMode(pseudo);
if (control instanceof NatTable) {
natTable = (NatTable) control;
} else if (control instanceof NatTableWrapper) {
natTable = ((NatTableWrapper) control).getNatTable();
label = ((NatTableWrapper) control).getLabel();
}
if (natTable != null) {
// check property
if (NatTableCSSConstants.BACKGROUND_COLOR.equalsIgnoreCase(property)) {
return CSSPropertyBackgroundSWTHandler.INSTANCE.retrieveCSSPropertyBackgroundColor(control, pseudo, engine);
} else if (NatTableCSSConstants.BACKGROUND_IMAGE.equalsIgnoreCase(property)) {
return CSSPropertyBackgroundSWTHandler.INSTANCE.retrieveCSSPropertyBackgroundImage(control, pseudo, engine);
} else if (NatTableCSSConstants.CELL_BACKGROUND_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return cssValueConverter.convert(
NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.BACKGROUND_COLOR,
displayMode,
label),
engine,
null);
} else if (NatTableCSSConstants.CELL_BACKGROUND_IMAGE.equalsIgnoreCase(property)) {
// TODO : manage path of Image.
return "none";
} else if (NatTableCSSConstants.FOREGROUND_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return cssValueConverter.convert(
NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.FOREGROUND_COLOR,
displayMode,
label),
engine,
null);
} else if (NatTableCSSConstants.HORIZONTAL_ALIGNMENT.equalsIgnoreCase(property)) {
HorizontalAlignmentEnum align = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.HORIZONTAL_ALIGNMENT,
displayMode,
label);
switch (align) {
case CENTER:
return "center";
case LEFT:
return "left";
case RIGHT:
return "right";
}
} else if (NatTableCSSConstants.VERTICAL_ALIGNMENT.equalsIgnoreCase(property)) {
VerticalAlignmentEnum align = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.VERTICAL_ALIGNMENT,
displayMode,
label);
switch (align) {
case TOP:
return "top";
case MIDDLE:
return "middle";
case BOTTOM:
return "bottom";
}
} else if (NatTableCSSConstants.FONT.equalsIgnoreCase(property)) {
Font font = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.FONT,
displayMode,
label);
return CSSSWTFontHelper.getFontComposite(font);
} else if (NatTableCSSConstants.FONT_FAMILY.equalsIgnoreCase(property)) {
Font font = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.FONT,
displayMode,
label);
return CSSSWTFontHelper.getFontFamily(font);
} else if (NatTableCSSConstants.FONT_SIZE.equalsIgnoreCase(property)) {
Font font = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.FONT,
displayMode,
label);
return CSSSWTFontHelper.getFontSize(font);
} else if (NatTableCSSConstants.FONT_STYLE.equalsIgnoreCase(property)) {
Font font = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.FONT,
displayMode,
label);
return CSSSWTFontHelper.getFontStyle(font);
} else if (NatTableCSSConstants.FONT_WEIGHT.equalsIgnoreCase(property)) {
Font font = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.FONT,
displayMode,
label);
return CSSSWTFontHelper.getFontWeight(font);
} else if (NatTableCSSConstants.IMAGE.equalsIgnoreCase(property)) {
// TODO : manage path of Image.
return "none";
} else if (NatTableCSSConstants.BORDER.equalsIgnoreCase(property)) {
BorderStyle border = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.BORDER_STYLE,
displayMode,
label);
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return border.getThickness() + " "
+ border.getLineStyle().toString().toLowerCase()
+ " " + border.getBorderMode().toString().toLowerCase()
+ " " + cssValueConverter.convert(
border.getColor(),
engine,
null);
} else if (NatTableCSSConstants.BORDER_COLOR.equalsIgnoreCase(property)) {
BorderStyle border = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.BORDER_STYLE,
displayMode,
label);
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return cssValueConverter.convert(
border.getColor(),
engine,
null);
} else if (NatTableCSSConstants.BORDER_STYLE.equalsIgnoreCase(property)) {
BorderStyle border = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.BORDER_STYLE,
displayMode,
label);
return border.getLineStyle().toString().toLowerCase();
} else if (NatTableCSSConstants.BORDER_WIDTH.equalsIgnoreCase(property)) {
BorderStyle border = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.BORDER_STYLE,
displayMode,
label);
return "" + border.getThickness();
} else if (NatTableCSSConstants.BORDER_MODE.equalsIgnoreCase(property)) {
BorderStyle border = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.BORDER_STYLE,
displayMode,
label);
return "" + border.getBorderMode();
} else if (NatTableCSSConstants.PASSWORD_ECHO_CHAR.equalsIgnoreCase(property)) {
return "" + NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.PASSWORD_ECHO_CHAR,
displayMode,
label);
} else if (NatTableCSSConstants.TEXT_DECORATION.equalsIgnoreCase(property)) {
TextDecorationEnum decoration = NatTableCSSHelper.getNatTableStyle(
natTable,
CellStyleAttributes.TEXT_DECORATION,
displayMode,
label);
switch (decoration) {
case NONE:
return "none";
case STRIKETHROUGH:
return "line-through";
case UNDERLINE:
return "underline";
case UNDERLINE_STRIKETHROUGH:
return "underline line-through";
}
} else if (NatTableCSSConstants.FREEZE_SEPARATOR_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return cssValueConverter.convert(
natTable.getConfigRegistry().getConfigAttribute(
FreezeConfigAttributes.SEPARATOR_COLOR,
displayMode,
label),
engine,
null);
} else if (NatTableCSSConstants.FREEZE_SEPARATOR_WIDTH.equalsIgnoreCase(property)) {
Integer width = natTable.getConfigRegistry().getConfigAttribute(
FreezeConfigAttributes.SEPARATOR_WIDTH,
displayMode,
label);
if (width == null) {
return "0";
} else {
return width.toString();
}
} else if (NatTableCSSConstants.GRID_LINE_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return cssValueConverter.convert(
natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.GRID_LINE_COLOR,
displayMode,
label),
engine,
null);
} else if (NatTableCSSConstants.GRID_LINE_WIDTH.equalsIgnoreCase(property)) {
Integer width = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.GRID_LINE_WIDTH,
displayMode,
label);
if (width == null) {
return "0";
} else {
return width.toString();
}
} else if (NatTableCSSConstants.RENDER_GRID_LINES.equalsIgnoreCase(property)) {
Boolean render = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.RENDER_GRID_LINES,
displayMode,
label);
if (render == null) {
return Boolean.TRUE.toString();
} else {
return render.toString();
}
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.CONVERSION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontComposite(font);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT_FAMILY.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.CONVERSION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontFamily(font);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT_SIZE.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.CONVERSION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontSize(font);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT_STYLE.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.CONVERSION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontStyle(font);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FONT_WEIGHT.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.CONVERSION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontWeight(font);
} else if (NatTableCSSConstants.CONVERSION_ERROR_BACKGROUND_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.CONVERSION_ERROR_STYLE,
displayMode,
label);
return cssValueConverter.convert(
style.getAttributeValue(CellStyleAttributes.BACKGROUND_COLOR),
engine,
null);
} else if (NatTableCSSConstants.CONVERSION_ERROR_FOREGROUND_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.CONVERSION_ERROR_STYLE,
displayMode,
label);
return cssValueConverter.convert(
style.getAttributeValue(CellStyleAttributes.FOREGROUND_COLOR),
engine,
null);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.VALIDATION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontComposite(font);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT_FAMILY.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.VALIDATION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontFamily(font);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT_SIZE.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.VALIDATION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontSize(font);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT_STYLE.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.VALIDATION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontStyle(font);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FONT_WEIGHT.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.VALIDATION_ERROR_STYLE,
displayMode,
label);
Font font = style.getAttributeValue(CellStyleAttributes.FONT);
return CSSSWTFontHelper.getFontWeight(font);
} else if (NatTableCSSConstants.VALIDATION_ERROR_BACKGROUND_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.VALIDATION_ERROR_STYLE,
displayMode,
label);
return cssValueConverter.convert(
style.getAttributeValue(CellStyleAttributes.BACKGROUND_COLOR),
engine,
null);
} else if (NatTableCSSConstants.VALIDATION_ERROR_FOREGROUND_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
EditConfigAttributes.VALIDATION_ERROR_STYLE,
displayMode,
label);
return cssValueConverter.convert(
style.getAttributeValue(CellStyleAttributes.FOREGROUND_COLOR),
engine,
null);
} else if (NatTableCSSConstants.WORD_WRAP.equalsIgnoreCase(property)) {
Boolean wrap = Boolean.FALSE;
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
}
}
if (painter instanceof AbstractTextPainter) {
wrap = ((AbstractTextPainter) painter).isWordWrapping();
}
return wrap.toString();
} else if (NatTableCSSConstants.TEXT_WRAP.equalsIgnoreCase(property)) {
Boolean wrap = Boolean.FALSE;
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
}
}
if (painter instanceof AbstractTextPainter) {
wrap = ((AbstractTextPainter) painter).isWrapText();
}
return wrap.toString();
} else if (NatTableCSSConstants.TEXT_TRIM.equalsIgnoreCase(property)) {
Boolean trim = Boolean.FALSE;
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
}
}
if (painter instanceof AbstractTextPainter) {
trim = ((AbstractTextPainter) painter).isTrimText();
}
return trim.toString();
} else if (NatTableCSSConstants.LINE_SPACING.equalsIgnoreCase(property)) {
int spacing = 0;
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
}
}
if (painter instanceof AbstractTextPainter) {
spacing = ((AbstractTextPainter) painter).getLineSpacing();
}
return "" + spacing;
} else if (NatTableCSSConstants.TEXT_DIRECTION.equalsIgnoreCase(property)) {
String direction = "horizontal";
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
}
}
if (painter instanceof VerticalTextPainter) {
direction = "vertical";
}
return direction;
} else if (NatTableCSSConstants.COLUMN_WIDTH.equalsIgnoreCase(property)) {
// return a value that would not trigger any action for resizing
// inherit is not supported here
return "default";
} else if (NatTableCSSConstants.ROW_HEIGHT.equalsIgnoreCase(property)) {
// return a value that would not trigger any action for resizing
// inherit is not supported here
return "default";
} else if (NatTableCSSConstants.PADDING.equalsIgnoreCase(property)) {
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
if (painter instanceof PaddingDecorator) {
PaddingDecorator decorator = (PaddingDecorator) painter;
return new StringBuilder()
.append(decorator.getTopPadding())
.append(" ")
.append(decorator.getRightPadding())
.append(" ")
.append(decorator.getBottomPadding())
.append(" ")
.append(decorator.getLeftPadding())
.toString();
}
}
}
} else if (NatTableCSSConstants.PADDING_TOP.equalsIgnoreCase(property)) {
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
if (painter instanceof PaddingDecorator) {
return "" + ((PaddingDecorator) painter).getTopPadding();
}
}
}
return "0";
} else if (NatTableCSSConstants.PADDING_RIGHT.equalsIgnoreCase(property)) {
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
if (painter instanceof PaddingDecorator) {
return "" + ((PaddingDecorator) painter).getRightPadding();
}
}
}
return "0";
} else if (NatTableCSSConstants.PADDING_BOTTOM.equalsIgnoreCase(property)) {
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
if (painter instanceof PaddingDecorator) {
return "" + ((PaddingDecorator) painter).getBottomPadding();
}
}
}
return "0";
} else if (NatTableCSSConstants.PADDING_LEFT.equalsIgnoreCase(property)) {
ICellPainter painter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
displayMode,
label);
if (painter != null) {
while (painter instanceof CellPainterWrapper) {
painter = ((CellPainterWrapper) painter).getWrappedPainter();
if (painter instanceof PaddingDecorator) {
return "" + ((PaddingDecorator) painter).getLeftPadding();
}
}
}
return "0";
} else if (NatTableCSSConstants.TABLE_BORDER_COLOR.equalsIgnoreCase(property)) {
for (Iterator<IOverlayPainter> it = natTable.getOverlayPainters().iterator(); it.hasNext();) {
IOverlayPainter painter = it.next();
if (painter instanceof NatTableBorderOverlayPainter) {
return engine.getCSSValueConverter(String.class).convert(
((NatTableBorderOverlayPainter) painter).getBorderColor(),
engine,
null);
}
}
} else if (NatTableCSSConstants.FILL_HANDLE_BORDER.equalsIgnoreCase(property)) {
BorderStyle border = NatTableCSSHelper.getNatTableStyle(
natTable,
FillHandleConfigAttributes.FILL_HANDLE_BORDER_STYLE,
displayMode,
label);
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return border.getThickness() + " "
+ border.getLineStyle().toString().toLowerCase()
+ " " + border.getBorderMode().toString().toLowerCase()
+ " " + cssValueConverter.convert(
border.getColor(),
engine,
null);
} else if (NatTableCSSConstants.FILL_HANDLE_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return cssValueConverter.convert(
natTable.getConfigRegistry().getConfigAttribute(
FillHandleConfigAttributes.FILL_HANDLE_COLOR,
displayMode,
label),
engine,
null);
} else if (NatTableCSSConstants.FILL_REGION_BORDER.equalsIgnoreCase(property)) {
BorderStyle border = NatTableCSSHelper.getNatTableStyle(
natTable,
FillHandleConfigAttributes.FILL_HANDLE_REGION_BORDER_STYLE,
displayMode,
label);
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return border.getThickness() + " "
+ border.getLineStyle().toString().toLowerCase()
+ " " + border.getBorderMode().toString().toLowerCase()
+ " " + cssValueConverter.convert(
border.getColor(),
engine,
null);
} else if (NatTableCSSConstants.INVERT_ICONS.equalsIgnoreCase(property)) {
// that information is hidden in specific painters and we are
// not able to determine it easily here
return Boolean.FALSE.toString();
} else if (NatTableCSSConstants.DECORATION.equalsIgnoreCase(property)) {
// TODO : manage path of Image.
return "none";
} else if (NatTableCSSConstants.PERCENTAGE_DECORATOR_COLORS.equalsIgnoreCase(property)) {
IStyle style = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.CELL_STYLE,
displayMode,
label);
Color c1 = style.getAttributeValue(PercentageBarDecorator.PERCENTAGE_BAR_COMPLETE_REGION_START_COLOR);
Color c2 = style.getAttributeValue(PercentageBarDecorator.PERCENTAGE_BAR_COMPLETE_REGION_END_COLOR);
Color c3 = style.getAttributeValue(PercentageBarDecorator.PERCENTAGE_BAR_INCOMPLETE_REGION_COLOR);
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return cssValueConverter.convert(c1, engine, null) + " "
+ cssValueConverter.convert(c2, engine, null) + " "
+ cssValueConverter.convert(c3, engine, null);
} else if (NatTableCSSConstants.CONVERTER.equalsIgnoreCase(property)) {
IDisplayConverter converter = natTable.getConfigRegistry().getConfigAttribute(
CellConfigAttributes.DISPLAY_CONVERTER,
displayMode,
label);
return NatTableCSSHelper.getDisplayConverterString(converter);
} else if (NatTableCSSConstants.HIDE_INDICATOR_COLOR.equalsIgnoreCase(property)) {
ICSSValueConverter cssValueConverter = engine.getCSSValueConverter(String.class);
return cssValueConverter.convert(
natTable.getConfigRegistry().getConfigAttribute(
HideIndicatorConfigAttributes.HIDE_INDICATOR_COLOR,
displayMode,
label),
engine,
null);
} else if (NatTableCSSConstants.HIDE_INDICATOR_WIDTH.equalsIgnoreCase(property)) {
Integer width = natTable.getConfigRegistry().getConfigAttribute(
HideIndicatorConfigAttributes.HIDE_INDICATOR_LINE_WIDTH,
displayMode,
label);
if (width == null) {
return "0";
} else {
return width.toString();
}
}
}
return null;
}
@Override
public void onAllCSSPropertiesApplyed(Object element, CSSEngine engine, String pseudo) throws Exception {
Object control = null;
if (element instanceof CSSStylableElement) {
CSSStylableElement elt = (CSSStylableElement) element;
control = elt.getNativeWidget();
}
NatTable natTable = null;
String label = null;
CSSElementContext context = null;
CSSElementContext natTableContext = null;
if (control instanceof NatTable) {
natTable = (NatTable) control;
} else if (control instanceof NatTableWrapper) {
natTable = ((NatTableWrapper) control).getNatTable();
label = ((NatTableWrapper) control).getLabel();
natTableContext = engine.getCSSElementContext(natTable);
}
if (natTable != null) {
context = engine.getCSSElementContext(control);
String displayMode = NatTableCSSHelper.getDisplayMode(pseudo);
CSS2FontProperties fontProperties =
(CSS2FontProperties) NatTableCSSHelper.getContextValue(
context,
displayMode,
CSS2FontPropertiesHelpers.CSS2FONT_KEY);
if (fontProperties != null) {
// if there are font properties, register the font
// check if there is a font registered in the hierarchy
Font font = NatTableCSSHelper.getNatTableStyle(natTable, CellStyleAttributes.FONT, displayMode, label);
if (font == null) {
// if there are no font properties already and no font, use
// the default font
font = GUIHelper.DEFAULT_FONT;
}
FontData fontData = CSSSWTFontHelper.getFontData(
fontProperties,
CSSSWTFontHelper.getFirstFontData(font));
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.FONT,
GUIHelper.getFont(fontData),
displayMode,
label);
}
BorderStyle borderStyle =
(BorderStyle) NatTableCSSHelper.getContextValue(
context,
displayMode,
NatTableCSSConstants.CV_BORDER_CONFIGURATION);
if (borderStyle != null) {
NatTableCSSHelper.applyNatTableStyle(
natTable,
CellStyleAttributes.BORDER_STYLE,
borderStyle,
displayMode,
label);
}
CSS2FontProperties conversionErrorFontProperties =
(CSS2FontProperties) NatTableCSSHelper.getContextValue(
context,
displayMode,
NatTableCSSConstants.CV_CONVERSION_ERROR_FONT_PROPERTIES);
if (conversionErrorFontProperties != null) {
// if there are font properties, register the font
FontData fontData = CSSSWTFontHelper.getFontData(
conversionErrorFontProperties,
CSSSWTFontHelper.getFirstFontData(GUIHelper.DEFAULT_FONT));
NatTableCSSHelper.applyNatTableStyle(
natTable,
EditConfigAttributes.CONVERSION_ERROR_STYLE,
CellStyleAttributes.FONT,
GUIHelper.getFont(fontData),
displayMode,
label);
}
CSS2FontProperties validationErrorFontProperties =
(CSS2FontProperties) NatTableCSSHelper.getContextValue(
context,
displayMode,
NatTableCSSConstants.CV_VALIDATION_ERROR_FONT_PROPERTIES);
if (validationErrorFontProperties != null) {
// if there are font properties, register the font
FontData fontData = CSSSWTFontHelper.getFontData(
validationErrorFontProperties,
CSSSWTFontHelper.getFirstFontData(GUIHelper.DEFAULT_FONT));
NatTableCSSHelper.applyNatTableStyle(
natTable,
EditConfigAttributes.VALIDATION_ERROR_STYLE,
CellStyleAttributes.FONT,
GUIHelper.getFont(fontData),
displayMode,
label);
}
Object pv = NatTableCSSHelper.getContextValue(context, displayMode, NatTableCSSConstants.PAINTER);
if (pv instanceof List<?>) {
@SuppressWarnings("unchecked")
List<String> painterValues = (List<String>) pv;
Map<String, Object> painterProperties =
NatTableCSSHelper.getPainterPropertiesInherited(context, natTableContext, displayMode);
ICellPainter painter = CellPainterFactory.getInstance().getCellPainter(painterValues, painterProperties);
if (painter != null) {
natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
painter,
displayMode,
label);
}
} else if (NatTableCSSHelper.resolvePainter(context, natTableContext, displayMode)) {
String backgroundKey = (String) NatTableCSSHelper.getContextValueInherited(
context,
natTableContext,
displayMode,
NatTableCSSConstants.CV_BACKGROUND_PAINTER);
List<String> decoratorKeys = NatTableCSSHelper.getDecoratorPainter(context, displayMode);
String contentKey = (String) NatTableCSSHelper.getContextValue(
context,
displayMode,
NatTableCSSConstants.CV_CONTENT_PAINTER);
Map<String, Object> painterProperties =
NatTableCSSHelper.getPainterPropertiesInherited(context, natTableContext, displayMode);
if ((painterProperties.containsKey(NatTableCSSConstants.PADDING_TOP)
|| painterProperties.containsKey(NatTableCSSConstants.PADDING_LEFT)
|| painterProperties.containsKey(NatTableCSSConstants.PADDING_BOTTOM)
|| painterProperties.containsKey(NatTableCSSConstants.PADDING_RIGHT))
&& !decoratorKeys.contains(CellPainterFactory.PADDING_DECORATOR_KEY)) {
decoratorKeys.add(0, CellPainterFactory.PADDING_DECORATOR_KEY);
}
if (borderStyle != null && !decoratorKeys.contains(CellPainterFactory.LINE_BORDER_DECORATOR_KEY)) {
decoratorKeys.add(0, CellPainterFactory.LINE_BORDER_DECORATOR_KEY);
}
ICellPainter painter = CellPainterFactory.getInstance().getCellPainter(
backgroundKey,
decoratorKeys,
contentKey,
painterProperties);
if (painter != null) {
natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
painter,
displayMode,
label);
}
}
}
}
}