NatTable 2.0.0 - New & Noteworthy
The NatTable 2.0.0 release is a major update that
- Updates the license to EPLv2
- Updates the minimum required Java version to Java 8 (BREE = JavaSE-1.8)
- Updates third-party dependencies
- Cleans up the code base
Of course we would also like to thank our contributors for adding new functions and fixing issues.
We also removed the extension.builder from the sources, as it was never published and not maintained for several years.
Despite the modifications named above there are numerous bugfixes related to issues on concurrency, scaling, percentage sizing or performance and memory consumption.
Almost every change in code is tracked via ticket in Bugzilla, so if you are curious about the details and all the bugs that are fixed and enhancements that were added with the 2.0.0 release, have a look here.
Third-Party-Dependencies Update
There are several changes to the dependencies of NatTable Core and the NatTable Extensions.Updated libraries
- GlazedLists 1.11
- Apache POI 4.1.1
- Nebula RichText 1.4.0
- Nebula CDateTime 1.5.0
Added libraries
- Apache Commons Collections4 (transitive dependency of Apache POI 4.1.1)
- Apache Commons Math3 (transitive dependency of Apache POI 4.1.1)
- Eclipse Collections 10.4.0
- SLF4J API
Removed libraries
- Apache Commons Logging
API changes
The code base was cleanup up to increase the maintainability. In this process several classes, methods, fields and constructors were removed that were marked deprecated for a while. Additionally with the increase of the BREE to JavaSE-1.8 we could remove custom functional interfaces that were used internally and remove them with the default Java functional interfaces.
We now also have a Sonar analysis running. You can find the analysis report here.
In this section the API additions that resulted from the Sonar analysis results are listed. All other additions and API modifications caused by new features are listed in the corresponding feature section.
-
Removed classes
- ActiveCellEditorRegistryThis static registry was replaced with an instance field in NatTable.
- BodyCellEditorMouseEventMatcherReplaced with CellEditorMouseEventMatcher
- CellEditDragModeIntended handling is now done internally in DragModeEventHandler
- ColumnGroupMenuItemProvidersMoved to MenuItemProviders and PopupMenuBuilder
- IRowHideShowCommandLayerMerged with IRowHideShowLayer
- RowSelectionPreserverFunctionality can be added by using the RowSelectionModel
- SelectionLayerPainter#ApplyBorderFunctionReplaced with java.util.function.Function
- SelectionLayerStructuralChangeEventHandlerUnnecessary as ISelectionModel is itself an ILayerEventHandler
-
Removed methods
- AbstractModeEventHandler#eventOnSameCell(MouseEvent, MouseEvent)Replaced with MouseEventHelper#eventOnSameCell(ILayer, MouseEvent, MouseEvent)
- AbstractTreeRowModel#getObjectAtIndexAndDepth(int, int)Formatting should be performed in a configured IExportFormatter
- CellPainterDecorator#setBaseCellPainterSpansWholeCell(boolean)Replaced with CellPainterDecorator#setPaintDecorationDependent(boolean)
- ColumnHeaderLayer#getSelectionLayerSelectionLayer should be accessed via body.
- CopySelectionLayerPainter#applyCopyBorderStyleReplaced with CopySelectionLayerPainter#getCopyBorderStyle to switch from an action to a supplier mechanism
- EditUtils#commitAndCloseActiveEditor()Replaced with NatTable#commitAndCloseActiveCellEditor()
- EditUtils#isCellEditable(ILayer, IConfigRegistry, PositionCoordinate)Replaced with EditUtils#isCellEditable(PositionCoordinate, IConfigRegistry)
- EventConflaterChain(int, int)Replaced with EventConflaterChain(long, long)
- FillHandleLayerPainter#applyCopyBorderStyleReplaced with FillHandleLayerPainter#getCopyBorderStyle to switch from an action to a supplier mechanism
- FillHandleLayerPainter#applyHandleBorderStyleReplaced with FillHandleLayerPainter#getHandleRegionBorderStyle to switch from an action to a supplier mechanism
- FillHandleLayerPainter#applyHandleStyleReplaced with FillHandleLayerPainter#getHandleColor and FillHandleLayerPainter#getHandleBorderStyle to switch from an action to a supplier mechanism
- FilterRowComboBoxDataProvider#removeCacheUdpateListenerReplaced with FilterRowComboBoxDataProvider#removeCacheUpdateListener
- GlazedListTreeData - expand/collapse methods expand/collapse operations are performed on the ITreeRowModel
- GlazedListTreeData#formatDataForDepth(int, int)Formatting should be performed in a configured IExportFormatter
- GlazedListTreeData#formatDataForDepth(int, T)Formatting should be performed in a configured IExportFormatter
- GridLineCellLayerPainter#drawGridLines(ILayer, GC, Rectangle, IConfigRegistry)Replaced with GridLineCellLayerPainter#drawGridLines(ILayer, GC, Rectangle, IConfigRegistry, List)
- GroupByDataLayer#getElementsInGroup(GroupByObject)Replaced with GroupByDataLayer#getItemsInGroup(GroupByObject)
- GroupByDataLayer#setSortModel(ISortModel)Replaced with GroupByDataLayer#initializeTreeComparator(ISortModel, IUniqueIndexLayer, boolean)
- GUIHelper#getImage(ImageData)No direct replacement as the function with the ImageData parameter was never functional
- ITreeData#formatDataForDepth(int, int)Formatting should be performed in a configured IExportFormatter
- ITreeData#formatDataForDepth(int, T)Formatting should be performed in a configured IExportFormatter
- ITreeRowModel#getObjectAtIndexAndDepth(int, int)Formatting should be performed in a configured IExportFormatter
- SelectionLayerPainter#applyBorderStyleReplaced with SelectionLayerPainter#getBorderStyle to switch from an action to a supplier mechanism
- SelectionLayerPainter#getBorderCells(ILayer, int, int, Rectangle, ApplyBorderFunction)Replaced with SelectionLayerPainter#getBorderCells(ILayer, int, int, Rectangle, Function)
- SizeConfig#correctPercentageValues(int, int)Replaced with SizeConfig#correctPercentageValues(double, int)
- TextCellEditor#setErrorDecorationText(String)Error decorations are applied by using the RenderErrorHandling
- TreeLayer#getTreeImagePainterThe TreeImagePainter configured via IConfigRegistry is used instead
- TreeRowModel#clearNot specified by ITreeRowModel
-
Removed fields
- FillHandleDragMode#startIndexUse FillHandleDragMode#startPosition that is relative to the SelectionLayer instead
- NatCombo#styleReplaced with NatCombo#widgetStyle
-
Removed constructors
- BodyMenuConfigurationNatTable, ILayer)
- ColumnGroupGroupHeaderLayer - Removed the unused SelectionLayer parameter
- ColumnGroupHeaderTextPainter - All constructors with ColumnGroupModel parameter
- ColumnReorderEvent - All constructors without explicit index parameters
- ColumnSelectionEvent(SelectionLayer, int)
- DefaultRowGroupHeaderLayerConfiguration(IRowGroupModel)
- IndentedTreeImagePainter - All constructors with ITreeRowModel parameter
- InlineCellEditEvent(ILayer, PositionCoordinate, Composite, IConfigRegistry, Object)
- RowGroupHeaderTextPainter - All constructors with IRowGroupModel parameter
- RowReorderEvent - All constructors without explicit index parameters
- RowSelectionEvent(SelectionLayer, Collection
, int) - SelectionLayer(IUniqueIndexLayer, ISelectionModel, boolean, boolean)
- ShowCellInViewportCommand(ILayer, int, int)
- ShowColumnInViewportCommand(ILayer, int, int)
- ShowRowInViewportCommand(ILayer, int, int)
- TreeImagePainter - All constructors with ITreeRowModel parameter
-
Added methods
The following methods were added to fix user reported bugs and issues reported by Sonar.
- ColumnCategoriesDialog#addListener(IColumnCategoriesDialogListener)
- ColumnCategoriesDialog#removeListener(IColumnCategoriesDialogListener)
- ColumnChooserDialog#addListener(ISelectionTreeListener)
- ColumnChooserDialog#removeListener(ISelectionTreeListener)
- ColumnChooserDialog#populateAvailableTree(List
, ColumnGroupModel, boolean) - ColumnChooserDialog#populateAvailableTree(List
, ColumnGroupHeaderLayer, boolean) - HideIndicatorOverlayPainter#setLayerOnTop(ILayer)
- HideIndicatorOverlayPainter#setLayerToLeft(ILayer)
-
Added constants
- FormulaParser - All regular expressions are now defined as public static final constants
-
Added constructors
- ComboBoxFilterRowConfiguration(ICellEditor, ImagePainter)
- HierarchicalWrapper(HierarchicalWrapper)
-
Modified helper classes and constants interfaces
According to best practices all helper classes with static helper methods are now final and have a private default constructor to avoid sub-classing and instantiating. Additionally all constants interfaces are changed to constants classes to avoid that these interfaces are implemented.
If the helper classes and constants interfaces were used as intended, this change should not affect users. If those classes were extended or the interfaces implemented (which was never the intended usage) you will need to adjust your code.
At least two changes will cause compilation errors if you are using the according feature:
- RowOnlySelectionConfiguration - removed the unnecessary generic
- FreezeConfigAttributes - renamed to FreezeConfigAttributes
The following list contains all modified interfaces and classes:
- ArrayUtil
- BlinkConfigAttributes
- CellConfigAttributes
- CellDisplayConversionUtils
- CellDisplayValueSearchUtil
- CellEdgeDetectUtil
- CellEditDialogFactory
- CellStyleAttributes
- ColorPersistor
- ColumnChooserUtils
- ColumnGroupUtils
- EditConfigAttributes
- EditConfigHelper
- EditConstants
- EditController
- ExportConfigAttributes
- FillHandleConfigAttributes
- FilterRowConfigAttributes
- FilterRowUtils
- FreezeHelper
- GraphicsUtils
- GridRegion
- GroupByConfigAttributes
- GUIHelper
- IFreezeConfigAttributes
- InvertUtil
- LayerCommandUtil
- LayerUtil
- MaxCellBoundsHelper
- MenuItemProviders
- Mode
- MouseEventHelper
- NatTableCSSConstants
- NatTableCSSHelper
- ObjectUtils
- PersistenceHelper
- PersistenceUtils
- PrintConfigAttributes
- RowGroupUtils
- SelectionConfigAttributes
- SelectionStyleLabels
- SelectionUtils
- SortConfigAttributes
- StructuralChangeEventHelper
- StylePersistor
- SummaryRowConfigAttributes
- TickUpdateConfigAttributes
- TreeConfigAttributes
Enhancements and new features
The following features were added to NatTable:-
Performance and memory consumption improvements
We realized that the memory consumption for NatTable instance with huge data sets is quite high. After some investigation we realized an issue with the usage of wrapper objects. To solve this we introduced Eclipse Collections as a new dependency to NatTable Core, to make use of their primitive collections. Additionally we added new methods and constructors in several classes that take primitive type parameters. In most cases the changes should not directly affect users, as the methods and constructors were added and existing methods were not changed.
Additional methods were added in the following classes in order to be able to operate on primitive types:
- AbstractColumnHideShowLayer
- AbstractMultiColumnCommand
- AbstractMultiRowCommand
- ColumnEntry
- ColumnReorderEvent
- ColumnReorderLayer
- ColumnStructuralChangeEvent
- ColumnVisualChangeEvent
- GroupModel
- GroupMultiColumnReorderCommand
- GroupMultiRowReorderCommand
- HideColumnPositionsEvent
- HideRowPositionsEvent
- HierarchicalTreeLayer
- MultiColumnReorderCommand
- MultiColumnShowCommand
- MultiRowReorderCommand
- MultiRowShowCommand
- PositionUtil
- Range
- RowGroupUtils
- RowReorderEvent
- RowReorderLayer
- RowSelectionEvent
- RowStructuralChangeEvent
- RowVisualChangeEvent
- SelectRowCommandHandler
- SelectRowGroupCommandHandler
- ShowColumnPositionsEvent
- ShowRowPositionsEvent
- StructuralChangeEventHelper
- UpdateColumnGroupCollapseCommand
- UpdateRowGroupCollapseCommand
The blog post NatTable + Eclipse Collections = Performance & Memory improvements ? explains the details.
We also noticed that the performance of the ListDataProvider improves if a MutableList is used as the input List instead of an ArrayList.
-
Dynamic scaling at runtime
It is now possible to configure a NatTable to support dynamic scaling (zoom in / zoom out) at runtime.
To enable the UI bindings for dynamic scaling the newly introduced ScalingUiBindingConfiguration needs to be added to the NatTable.
natTable.addConfiguration( new ScalingUiBindingConfiguration(natTable));This will add a MouseWheelListener and some key bindings to zoom in/out:
- CTRL + mousewheel up = zoom in
- CTRL + mousewheel down = zoom out
- CTRL + ‘+’ = zoom in
- CTRL + ‘-‘ = zoom out
- CTRL + ‘0’ = reset zoom
The blog post NatTable – dynamic scaling enhancements explains the new feature in more detail.
The following API was added or changed visibility for the implementation:
- AbstractDpiConverter#scaleFactor
- CellStyleProxy#getAttributeValue(ConfigAttribute
, boolean) - CellStyleUtil#getFont(IStyle, IConfigRegistry)
- ConfigureScalingCommand(IDpiConverter)
- CSSConfigureScalingCommandHandler
- DefaultHorizontalDpiConverter
- DefaultVerticalDpiConverter
- FixedScalingDpiConverter
- GUIHelper#convertHorizontalDpiToPixel(int, boolean)
- GUIHelper#convertHorizontalDpiToPixel(int, IConfigRegistry)
- GUIHelper#convertHorizontalPixelToDpi(int, boolean)
- GUIHelper#convertHorizontalPixelToDpi(int, IConfigRegistry)
- GUIHelper#convertVerticalDpiToPixel(int, boolean)
- GUIHelper#convertVerticalDpiToPixel(int, IConfigRegistry)
- GUIHelper#convertVerticalPixelToDpi(int, boolean)
- GUIHelper#convertVerticalPixelToDpi(int, IConfigRegistry)
- GUIHelper#getDisplayImage(String)
- GUIHelper#getDisplayImageByURL(String, URL)
- GUIHelper#getDisplayImageByURL(URL)
- GUIHelper#getDpiX(boolean)
- GUIHelper#getDpiY(boolean)
- GUIHelper#getImage(String, boolean, boolean)
- GUIHelper#getImageByURL(String, URL, boolean, boolean)
- GUIHelper#getInternalImageUrl(String, boolean, boolean)
- GUIHelper#getScaledFont(Font, float)
- GUIHelper#getScalingImageSuffix(boolean)
- GUIHelper#needScaling(boolean)
- GUIHelper#setDpi(int, int)
- IEditErrorHandler#displayError(ICellEditor, IConfigRegistry, Exception)
- IStyle#getAttributeValue(ConfigAttribute
, T) - IThemeExtension#createPainterInstances()
- NatLayerPainter#natTable
- NatTable#configureScaling(IDpiConverter, IDpiConverter)
- NatTableConfigAttributes
- NoScalingDpiConverter
- ResetScalingAction
- ScalingMouseWheelListener
- ScalingUiBindingConfiguration
- ScalingUtil
- Style(Style)
- StyleProxy#configRegistry
- ThemeConfiguration#createPainterInstances()
- ThemeManager#refreshCurrentTheme()
- ZoomInScalingAction
- ZoomOutScalingAction
The following API was changed for the implementation:
- IndentedTreeImagePainter#getIndent(int) -> IndentedTreeImagePainter#getIndent(int, IConfigRegistry)
- PaddingDecorator#getInteriorBounds(Rectangle) -> PaddingDecorator#getInteriorBounds(Rectangle, IConfigRegistry)
-
LabelStack is now a Collection
The LabelStack is now a Collection. With this it is possible to directly operate on the LabelStack and it is not necessary to use LabelStack#getLabels() anymore, which was deprecated with this change.
-
DisplayMode is now an enumeration
The DisplayMode is used to determine the cell state (normal, selected, hovered, edit). It was for historical reasons a String that was defined in a constants class. This was limiting the handling and also caused issues if people where using Strings instead of the pre-defined constants, as only those constants are handled internally. We therefore decided to change the String constants into an enumeration to make the API more intuitive. Additionally we can now internally use EnumMap to increase performance when searching for values in the ConfigRegistry.
Most users should not be affected by this change. Only users that create custom layers and do not extend the existing abstract implementations will have to adjust getDisplayModeByPosition(int, int) to return DisplayMode instead of String.
The following classes/interfaces were changed for the implementation:
- AbstractIndexLayerTransform
- AbstractLayer
- AbstractLayerCell
- AbstractLayerTransform
- CellStyleProxy
- CellStyleUtil
- ConfigRegistry
- DefaultDisplayModeOrdering
- DisplayMode
- IConfigRegistry
- IDisplayModeOrdering
- ILayer
- ILayerCell
- NatTableCSSHelper
- StyleProxy
-
Mode is now an enumeration
The Mode is used to switch between UI interaction modes, like from click to drag. As the classes in charge are only used internally, this should not affect users.
The following classes were changed for the implementation:
- AbstractModeEventHandler
- Mode
- ModeSupport
-
ISearchDirection is now an enumeration
The ISearchDirection is used internally while searching for values in a NatTable. As there are only two directions possible, we changed the String constants into an enumeration. To follow the Java naming conventions we also renamed it to SearchDirection.
Users should only be affected by this change if they implemented custom search strategies or trigger SearchCommands programmatically.
The following classes were changed for the implementation:
- AbstractSearchStrategy
- ColumnSearchStrategy
- GridSearchStrategy
- RowSearchStrategy
- SearchCommand
- SearchDirection
- SelectionSearchStrategy
-
Make implementation of spanning easier
Via the abstract WrappingSpanningDataProvider it is easier to add spanning to an existing table, as only the spanning logic needs to be taken care of. Before the whole ISpanningDataProvider interface needed to be implemented.
ISpanningDataProvider dataProvider = new WrappingSpanningDataProvider(bodyDataProvider) { @Override public DataCell getCellByPosition(int columnPosition, int rowPosition) { // TODO implement spanning logic } }; -
Added commands to hide columns and rows by index
There are use cases where hide/show operations need to be executed programmatically, in which only the column/row indexes are known. To support this we introduced the following commands and command handlers:
- HideColumnByIndexCommand
- HideColumnByIndexCommandHandler
- HideRowByIndexCommand
- HideRowByIndexCommandHandler
The command handlers are already registered with the default layers, so the execution of the command is working out of the box.
-
Add possibility to combine filtering and row hide/show by index
Via the GlazedListsRowHideShowLayer it is possible to filter rows by row id rather than the index. This is especially useful in cases where a table also supports sorting and filtering based on GlazedLists. To make it easier to combine filtering with row hide/show, the following method was added:
- GlazedListsRowHideShowLayer#getHideRowMatcherEditor()
// add the filter row functionality DefaultGlazedListsStaticFilterStrategyfilterStrategy = new DefaultGlazedListsStaticFilterStrategy<>( bodyLayerStack.getFilterList(), columnPropertyAccessor, configRegistry); // connect row hide/show with filtering filterStrategy.addStaticFilter( bodyLayerStack.getRowHideShowLayer().getHideRowMatcherEditor()); The following example shows the usage:
Tutorial Examples -> Integration -> EditableSortableGroupByWithFilterExample
-
Support filtering of converted data
In Bug 552575 it was reported that a text based filter on columns whose data is shown converted, is not working correctly. To fix this we introduced the following new configuration attribute and corresponding method for the handling:
- FilterRowConfigAttributes#FILTER_CONTENT_DISPLAY_CONVERTER
- DefaultGlazedListsFilterStrategy#getFilterContentDisplayConverter(int)
// register a date converter for the birthday column DefaultDateDisplayConverter converter = new DefaultDateDisplayConverter("yyyy-MM-dd"); configRegistry.registerConfigAttribute( CellConfigAttributes.DISPLAY_CONVERTER, converter, DisplayMode.NORMAL, ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + DataModelConstants.BIRTHDAY_COLUMN_POSITION); // register the same converter in the filter row as content // converter to support text based filtering on formatted Date // objects (e.g. filter for "-08-" to get all birthdays in August) configRegistry.registerConfigAttribute( FilterRowConfigAttributes.FILTER_CONTENT_DISPLAY_CONVERTER, converter, DisplayMode.NORMAL, FilterRowDataLayer.FILTER_ROW_COLUMN_LABEL_PREFIX + DataModelConstants.BIRTHDAY_COLUMN_POSITION);The following example shows the usage:
Tutorial Examples -> GlazedLists -> Filter -> GlazedListsFilterExample
-
Make the configuration of multi-export on the same sheet easier
To export multiple NatTable instances on the same sheet using the Apache POI extension, it was necessary to configure the exporter via PoiExcelExporter#setExportOnSameSheet(boolean) and call NatExporter#exportMultipleNatTables(ILayerExporter, Map
, boolean, String) with the appropriate parameter values.We introduced the following default method to avoid the additional configuration on the PoiExcelExporter. This way an export on the same sheet can be triggered directly by calling the appropriate method on NatExporter.
- ILayerExporter#setExportOnSameSheet(boolean)
-
Extended the configurability of content proposals in the TextCellEditor
We added the following API to the TextCellEditor to give a user more options on configuring content proposal support.
- TextCellEditor#autoActivationDelay
- TextCellEditor#contentProposalAdapter
- TextCellEditor#proposalAcceptanceStyle
- TextCellEditor#enableContentProposal(IControlContentAdapter, IContentProposalProvider, KeyStroke, char[], int, int)
-
Extension of the ILayer interface
In the past versions we introduced new methods only in the AbstractLayer class to avoid API breakage when adding new methods in the ILayer interface. We now added those methods to the ILayer interface to make them better integratable without multiple instanceof checks.
- ILayer#configure(IConfigRegistry, UiBindingRegistry)
- ILayer#getProvidedLabels()
- ILayer#isDynamicSizeLayer()
-
Updated checkbox images
We updated the checkbox images to match the current flat design of Windows. Additionally we added those images in an inverted design, to make the checkboxes better integratable with the dark theme. To use the inverted versions of the checkbox images, the following constructor was added to CheckBoxPainter.
- CheckBoxPainter(boolean, boolean)
-
Align hide/show layer interfaces
In the cleanup process we modified several interfaces and classes related to the hide/show feature. We removed the IRowHideShowCommandLayer and merged it with IRowHideShowLayer.
Additionally the following classes were modified to align the API.
- AbstractColumnHideShowLayer
- AbstractRowHideShowLayer
- IColumnHideShowLayer
- IRowHideShowLayer
- MultiRowHideCommandHandler
- MultiRowShowCommandHandler
- RowHideCommandHandler
- RowPositionHideCommandHandler
- RowShowCommandHandler
- ShowAllRowsCommandHandler
-
Added missing style configurations in themes and CSS
We noticed that for some of the features added in the past releases, some style configurations were missing.
The following styling API was added to the NatTable Theme configuration:
- DefaultNatTableThemeConfiguration#dataChangeBgColor
- DefaultNatTableThemeConfiguration#dataChangeFgColor
- DefaultNatTableThemeConfiguration#dataChangeGradientBgColor
- DefaultNatTableThemeConfiguration#dataChangeGradientFgColor
- DefaultNatTableThemeConfiguration#dataChangeHAlign
- DefaultNatTableThemeConfiguration#dataChangeVAlign
- DefaultNatTableThemeConfiguration#dataChangeFont
- DefaultNatTableThemeConfiguration#dataChangeImage
- DefaultNatTableThemeConfiguration#dataChangeBorderStyle
- DefaultNatTableThemeConfiguration#dataChangePWEchoChar
- DefaultNatTableThemeConfiguration#dataChangeTextDecoration
- DefaultNatTableThemeConfiguration#dataChangeSelectionBgColor
- DefaultNatTableThemeConfiguration#dataChangeSelectionFgColor
- DefaultNatTableThemeConfiguration#dataChangeSelectionGradientBgColor
- DefaultNatTableThemeConfiguration#dataChangeSelectionGradientFgColor
- DefaultNatTableThemeConfiguration#dataChangeSelectionHAlign
- DefaultNatTableThemeConfiguration#dataChangeSelectionVAlign
- DefaultNatTableThemeConfiguration#dataChangeSelectionFont
- DefaultNatTableThemeConfiguration#dataChangeSelectionImage
- DefaultNatTableThemeConfiguration#dataChangeSelectionBorderStyle
- DefaultNatTableThemeConfiguration#dataChangeSelectionPWEchoChar
- DefaultNatTableThemeConfiguration#dataChangeSelectionTextDecoration
- DefaultNatTableThemeConfiguration#freezeSeparatorWidth
- DefaultNatTableThemeConfiguration#hideIndicatorColor
- DefaultNatTableThemeConfiguration#hideIndicatorWidth
- ThemeConfiguration#configureDataChangeStyle(IConfigRegistry)
- ThemeConfiguration#configureHideIndicatorStyle(IConfigRegistry)
- ThemeConfiguration#getDataChangeStyle()
- ThemeConfiguration#getDataChangeSelectionStyle()
- ThemeConfiguration#getFreezeSeparatorWidth()
- ThemeConfiguration#getHideIndicatorColor()
- ThemeConfiguration#getHideIndicatorWidth()
- DefaultHierarchicalTreeLayerThemeExtension
- ModernHierarchicalTreeLayerThemeExtension
- DarkHierarchicalTreeLayerThemeExtension
The following CSS attributes were added to the CSS processing for NatTable table processing:
- hide-indicator-color
- hide-indicator-width
Additionally we added the following methods to deal with a memory leak caused by the CSS implementation in NatTable.
- NatTableElementAdapter#dispose()
- NatTableWrapper#dispose()
- NatTableWrapperElementAdapter#dispose()