Class ResizeColumnHideShowLayer

All Implemented Interfaces:
IColumnHideShowLayer, ILayer, ILayerListener, IUniqueIndexLayer, IPersistable

public class ResizeColumnHideShowLayer extends AbstractIndexLayerTransform implements IColumnHideShowLayer
Layer to add support for column hide/show feature to a NatTable. Technically hides columns by setting the column width to 0. This way percentage sized columns increase correctly to take the remaining space. This approach is different from the classical ColumnHideShowLayer where the column is really hidden in the layer which leads to index-position-transformation instead of basic column resizing.

Note: It is suggested to set DataLayer.setDistributeRemainingColumnSpace(boolean) to true when using this layer, or set DataLayer.setFixColumnPercentageValuesOnResize(boolean) to false. Otherwise a column resize triggers the percentage value calculation of dynamic sized columns, which then leads to gaps as the fixed percentage sized columns to not grow by default.

Since:
1.6
See Also:
  • Field Details

    • PERSISTENCE_KEY_HIDDEN_COLUMNS

      public static final String PERSISTENCE_KEY_HIDDEN_COLUMNS
      See Also:
    • hiddenColumns

      protected org.eclipse.collections.api.map.primitive.MutableIntObjectMap<ResizeColumnHideShowLayer.ColumnSizeInfo> hiddenColumns
      Map that contains the columns hidden by this layer with the initial width so it can be shown again with the previous width.
  • Constructor Details

    • ResizeColumnHideShowLayer

      public ResizeColumnHideShowLayer(IUniqueIndexLayer underlyingLayer, DataLayer bodyDataLayer)
      Parameters:
      underlyingLayer - The underlying layer.
      bodyDataLayer - The DataLayer of the body region needed to retrieve the configured column width.
  • Method Details

    • saveState

      public void saveState(String prefix, Properties properties)
      Description copied from interface: IPersistable
      Saves the state to the given Properties using the specified prefix. Note: The prefix must be prepended to the property key to support multiple states within one Properties instance.
      Specified by:
      saveState in interface IPersistable
      Overrides:
      saveState in class AbstractIndexLayerTransform
      Parameters:
      prefix - The prefix to use for the state keys. Is also used as the state configuration name.
      properties - The Properties instance to save the state to.
    • loadState

      public void loadState(String prefix, Properties properties)
      Description copied from class: AbstractIndexLayerTransform
      Underlying layers must load state first. If this is not done, IStructuralChangeEvent from underlying layers will reset caches after state has been loaded
      Specified by:
      loadState in interface IPersistable
      Overrides:
      loadState in class AbstractIndexLayerTransform
      Parameters:
      prefix - The prefix to use for the state keys. Is also used as the state configuration name.
      properties - The Properties instance to load the state from.
    • getConfigLabelsByPosition

      public LabelStack getConfigLabelsByPosition(int columnPosition, int rowPosition)
      Description copied from interface: ILayer
      Returns the config labels for the cell at the given coordinates. Needed to retrieve the corresponding configurations out of the IConfigRegistry.
      Specified by:
      getConfigLabelsByPosition in interface ILayer
      Overrides:
      getConfigLabelsByPosition in class AbstractIndexLayerTransform
      Parameters:
      columnPosition - The column position of the cell.
      rowPosition - The row position of the cell.
      Returns:
      The LabelStack with the config labels for the cell at the given coordinates.
    • getHiddenColumnIndexes

      public Collection<Integer> getHiddenColumnIndexes()
      Description copied from interface: IColumnHideShowLayer
      Returns all indexes of the columns that are hidden in this layer.

      Note: It does not include the column indexes of hidden columns from underlying layers. This would cause issues on calculating positions as every layer is responsible for those calculations itself.

      Specified by:
      getHiddenColumnIndexes in interface IColumnHideShowLayer
      Returns:
      The indexes of the columns that are hidden in this layer.
    • getHiddenColumnIndexesArray

      public int[] getHiddenColumnIndexesArray()
      Description copied from interface: IColumnHideShowLayer
      Will collect and return all indexes of the columns that are hidden in this layer.

      Note: It is not intended that it also collects the column indexes of underlying layers. This would cause issues on calculating positions, as every layer is responsible for those calculations itself.

      Specified by:
      getHiddenColumnIndexesArray in interface IColumnHideShowLayer
      Returns:
      All column indexes that are hidden in this layer.
    • hideColumnPositions

      public void hideColumnPositions(int... columnPositions)
      Description copied from interface: IColumnHideShowLayer
      Hide the columns at the specified positions. Note that the positions are required as this method might get called via user interaction in a transformed table (e.g. reordered).
      Specified by:
      hideColumnPositions in interface IColumnHideShowLayer
      Parameters:
      columnPositions - The column positions to hide.
    • hideColumnPositions

      public void hideColumnPositions(Collection<Integer> columnPositions)
      Description copied from interface: IColumnHideShowLayer
      Hide the columns at the specified positions. Note that the positions are required as this method might get called via user interaction in a transformed table (e.g. reordered).
      Specified by:
      hideColumnPositions in interface IColumnHideShowLayer
      Parameters:
      columnPositions - The column positions to hide.
    • hideColumnIndexes

      public void hideColumnIndexes(int... columnIndexes)
      Description copied from interface: IColumnHideShowLayer
      Hide the columns with the given indexes.
      Specified by:
      hideColumnIndexes in interface IColumnHideShowLayer
      Parameters:
      columnIndexes - The indexes of the columns to hide.
    • hideColumnIndexes

      public void hideColumnIndexes(Collection<Integer> columnIndexes)
      Description copied from interface: IColumnHideShowLayer
      Hide the columns with the given indexes.
      Specified by:
      hideColumnIndexes in interface IColumnHideShowLayer
      Parameters:
      columnIndexes - The indexes of the columns to hide.
    • showColumnIndexes

      public void showColumnIndexes(int... columnIndexes)
      Description copied from interface: IColumnHideShowLayer
      Show the columns with the given indexes again if they are hidden by this layer. Note that the indexes are needed and not the positions. This is because a user is not able to select the hidden column in the NatTable and therefore the position is not available anymore.
      Specified by:
      showColumnIndexes in interface IColumnHideShowLayer
      Parameters:
      columnIndexes - The column indexes to show again.
    • showColumnIndexes

      public void showColumnIndexes(Collection<Integer> columnIndexes)
      Description copied from interface: IColumnHideShowLayer
      Show the columns with the given indexes again if they are hidden by this layer. Note that the indexes are needed and not the positions. This is because a user is not able to select the hidden column in the NatTable and therefore the position is not available anymore.
      Specified by:
      showColumnIndexes in interface IColumnHideShowLayer
      Parameters:
      columnIndexes - The column indexes to show again.
    • showColumnPosition

      public void showColumnPosition(int columnPosition, boolean showToLeft, boolean showAll)
      Description copied from interface: IColumnHideShowLayer
      Show the column(s) that are hidden next to the given column position.
      Specified by:
      showColumnPosition in interface IColumnHideShowLayer
      Parameters:
      columnPosition - The column position whose neighbors should be shown again.
      showToLeft - Whether the column positions to the left or the right of the given column position should be shown again.
      showAll - Whether all hidden adjacent columns should be shown again or only the single direct adjacent column.
    • showAllColumns

      public void showAllColumns()
      Description copied from interface: IColumnHideShowLayer
      Show all hidden columns again.
      Specified by:
      showAllColumns in interface IColumnHideShowLayer
    • getProvidedLabels

      public Collection<String> getProvidedLabels()
      Specified by:
      getProvidedLabels in interface ILayer
      Overrides:
      getProvidedLabels in class AbstractLayer
      Returns:
      The collection of labels that are provided by this layer.