Class GDynamicColumnTableModel<ROW_TYPE,DATA_SOURCE>

java.lang.Object
javax.swing.table.AbstractTableModel
docking.widgets.table.AbstractGTableModel<ROW_TYPE>
docking.widgets.table.AbstractSortedTableModel<ROW_TYPE>
docking.widgets.table.GDynamicColumnTableModel<ROW_TYPE,DATA_SOURCE>
Type Parameters:
ROW_TYPE - the row object class for this table model.
DATA_SOURCE - the type of data that will be returned from getDataSource(). This object will be given to the DynamicTableColumn objects used by this table model when DynamicTableColumn.getValue(Object, ghidra.docking.settings.Settings, Object, ServiceProvider) is called.
All Implemented Interfaces:
ConfigurableColumnTableModel, DynamicColumnTableModel<ROW_TYPE>, RowObjectTableModel<ROW_TYPE>, SelectionStorage<ROW_TYPE>, SortedTableModel, VariableColumnTableModel, Serializable, EventListener, ChangeListener, TableModel
Direct Known Subclasses:
AnyObjectTableModel, SetEquateTableModel, ThemeColorTableModel, ThemeFontTableModel, ThemeIconTableModel, ThreadedTableModel

public abstract class GDynamicColumnTableModel<ROW_TYPE,DATA_SOURCE> extends AbstractSortedTableModel<ROW_TYPE> implements ChangeListener, VariableColumnTableModel, DynamicColumnTableModel<ROW_TYPE>
An abstract table model for showing DynamicTableColumns where each row is based on an object of type ROW_TYPE. The client is responsible for implementing createTableColumnDescriptor(). This method specifies which default columns the table should have and whether they should be visible or hidden. Hidden columns can be made visible through the UI.

This model will also discover other system columns that understand how to render ROW_TYPE data directly. Also, if you create a mapper(s) for your row type, then this model will load columns for each type for which a mapper was created, all as optional, hidden columns.

The various attributes of the columns of this model (visibility, position, size, etc) are saved to disk as tool preferences when the user exits the tool.

Implementation Note: this model loads all columns, specific and discovered, as being visible. Then, during initialization, the TableColumnModelState class will either hide all non-default columns, or reload the column state if any previous saved state is found.

See Also:
  • Field Details

  • Constructor Details

    • GDynamicColumnTableModel

      public GDynamicColumnTableModel(ServiceProvider serviceProvider)
  • Method Details

    • createTableColumnDescriptor

      protected abstract TableColumnDescriptor<ROW_TYPE> createTableColumnDescriptor()
    • isSortable

      public boolean isSortable(int columnIndex)
      Description copied from interface: SortedTableModel
      Returns true if the specified columnIndex is sortable.
      Specified by:
      isSortable in interface SortedTableModel
      Parameters:
      columnIndex - the column index
      Returns:
      true if the specified columnIndex is sortable
    • loadDiscoveredTableColumns

      protected void loadDiscoveredTableColumns()
    • reloadColumns

      protected void reloadColumns()
      Allows clients to defer column creation until after this parent class's constructor has been called. This method will not restore any column settings that have been changed after construction. Thus, this method is intended only to be called during the construction process.
    • getTableColumnDescriptor

      protected TableColumnDescriptor<ROW_TYPE> getTableColumnDescriptor()
    • createSortComparator

      protected Comparator<ROW_TYPE> createSortComparator(int columnIndex)
      Description copied from class: AbstractSortedTableModel
      An extension point for subclasses to insert their own comparator objects for their data. Subclasses can create comparators for a single or multiple columns, as desired.
      Overrides:
      createSortComparator in class AbstractSortedTableModel<ROW_TYPE>
      Parameters:
      columnIndex - the column index
      Returns:
      the comparator
    • createSortComparatorForColumn

      protected Comparator<Object> createSortComparatorForColumn(int columnIndex)
      This differs from createSortComparator(int) in that the other method creates a comparator that operates on a full row value, whereas this method operates on column values.
      Parameters:
      columnIndex - the column index
      Returns:
      a comparator for the specific column values
    • stateChanged

      public void stateChanged(ChangeEvent e)
      Callback when column settings have changed
      Specified by:
      stateChanged in interface ChangeListener
    • addTableColumn

      protected void addTableColumn(DynamicTableColumn<ROW_TYPE,?,?> column)
      Adds the given column at the end of the list of columns. This method is intended for implementations to add custom column objects, rather than relying on generic, discovered DynamicTableColumn implementations.

      Note: this method assumes that the columns have already been sorted

      Parameters:
      column - The field to add
    • addTableColumns

      protected void addTableColumns(Set<DynamicTableColumn<ROW_TYPE,?,?>> columns)
      Adds the given columns to the end of the list of columns. This method is intended for implementations to add custom column objects, rather than relying on generic, discovered DynamicTableColumn implementations.

      Note: this method assumes that the columns have already been sorted.

      Parameters:
      columns - The columns to add
    • addTableColumns

      protected void addTableColumns(Set<DynamicTableColumn<ROW_TYPE,?,?>> columns, boolean isDefault)
      Adds the given columns to the end of the list of columns. This method is intended for implementations to add custom column objects, rather than relying on generic, discovered DynamicTableColumn implementations.

      Note: this method assumes that the columns have already been sorted.

      Parameters:
      columns - The columns to add
      isDefault - true if these are default columns
    • addTableColumn

      protected void addTableColumn(DynamicTableColumn<ROW_TYPE,?,?> column, int index, boolean isDefault)
      Adds the given field at the given index to the list of fields in this class. This method is intended for implementations to add custom column objects, rather than relying on generic, discovered DynamicTableColumn implementations.

      Note: this method assumes that the columns have already been sorted.

      Parameters:
      column - The field to add.
      index - The index at which to add the field. If the index value is invalid (negative or greater than the number of columns), then the column will be added to the end of the columns list.
      isDefault - true if this is a default column
    • removeTableColumn

      protected void removeTableColumn(DynamicTableColumn<ROW_TYPE,?,?> column)
      Removes the given column from this model
      Parameters:
      column - the column to remove
    • removeTableColumns

      protected void removeTableColumns(Set<DynamicTableColumn<ROW_TYPE,?,?>> columns)
      Removes the given columns from this model. This method allows the client to remove multiple columns at once, firing only one event when the work is finished.
      Parameters:
      columns - the columns to remove
    • getDefaultColumnCount

      public int getDefaultColumnCount()
      Description copied from interface: VariableColumnTableModel
      Gets the count of the default columns for this model. This model may have non-default columns added. This method will return the count of columns that have been setup specifically by the table model. This method can be used to iterate of the first n columns of this model in order to get information for the default columns by calling methods like TableModel.getColumnName(int).
      Specified by:
      getDefaultColumnCount in interface VariableColumnTableModel
      Returns:
      Gets the count of the default columns for this model.
    • isVisibleByDefault

      public boolean isVisibleByDefault(int modelIndex)
      Description copied from interface: VariableColumnTableModel
      Returns true if the column denoted by the given model index is specified by the table model as being visible when the table is loaded for the first time.
      Specified by:
      isVisibleByDefault in interface VariableColumnTableModel
      Parameters:
      modelIndex - The index in the column in the column model.
      Returns:
      true if the column denoted by the given model index is visible default.
    • isDefaultColumn

      public boolean isDefaultColumn(int modelIndex)
      Returns true if the column indicated by the index in the model is a default column (meaning that it was specified by the model and not discovered).
      Specified by:
      isDefaultColumn in interface VariableColumnTableModel
      Parameters:
      modelIndex - the index of the column in the model.
      Returns:
      true if the column is a default.
    • getColumnCount

      public final int getColumnCount()
      Specified by:
      getColumnCount in interface TableModel
    • getColumnClass

      public final Class<?> getColumnClass(int column)
      Specified by:
      getColumnClass in interface TableModel
      Overrides:
      getColumnClass in class AbstractTableModel
    • getColumnName

      public final String getColumnName(int column)
      Specified by:
      getColumnName in interface TableModel
      Overrides:
      getColumnName in class AbstractTableModel
    • getPreferredColumnWidth

      public int getPreferredColumnWidth(int column)
      Overrides:
      getPreferredColumnWidth in class AbstractGTableModel<ROW_TYPE>
    • getColumnDisplayName

      public String getColumnDisplayName(int columnIndex)
      Specified by:
      getColumnDisplayName in interface VariableColumnTableModel
    • getColumnDescription

      public String getColumnDescription(int column)
      Specified by:
      getColumnDescription in interface VariableColumnTableModel
    • getUniqueIdentifier

      public String getUniqueIdentifier(int column)
      Description copied from interface: VariableColumnTableModel
      Returns a value that is unique for a given table column. This is different than getting the display name, which may be shared by different columns.
      Specified by:
      getUniqueIdentifier in interface VariableColumnTableModel
      Parameters:
      column - the index (in the model space) of the column for which to get the identifier
    • getColumnValueForRow

      public final Object getColumnValueForRow(ROW_TYPE t, int columnIndex)
      Description copied from interface: RowObjectTableModel
      Implementors are expected to return a value at the given column index for the specified row object. This is essentially a more specific version of the TableModel.getValueAt(int, int) that allows this class's comparator objects to work.
      Specified by:
      getColumnValueForRow in interface RowObjectTableModel<ROW_TYPE>
      Parameters:
      t - The object that represents a given row.
      columnIndex - The column index for which a value is requested.
      Returns:
      a value at the given column index for the specified row object.
    • getDataSource

      public abstract DATA_SOURCE getDataSource()
      Returns the table's context for the data.
      Returns:
      the table's context for the data.
    • getColumnIndex

      public int getColumnIndex(Class<?> columnClass)
      Returns the column index of the given column class
      Parameters:
      columnClass - the class for the type of DynamicTableColumn you want to find.
      Returns:
      the column index for the specified DynamicTableColumn. -1 if not found.
    • getColumnIndex

      public int getColumnIndex(DynamicTableColumn<ROW_TYPE,?,?> identifier)
      Description copied from interface: DynamicColumnTableModel
      Returns the model index for the given column
      Specified by:
      getColumnIndex in interface DynamicColumnTableModel<ROW_TYPE>
      Parameters:
      identifier - the column
      Returns:
      the model index
    • getColumn

      public DynamicTableColumn<ROW_TYPE,?,?> getColumn(int index)
      Description copied from interface: DynamicColumnTableModel
      Returns the column for the given model index
      Specified by:
      getColumn in interface DynamicColumnTableModel<ROW_TYPE>
      Parameters:
      index - the model index of the column (this can differ from the view index)
      Returns:
      the column
    • getColumnSettingsDefinitions

      public SettingsDefinition[] getColumnSettingsDefinitions(int index)
      Description copied from interface: ConfigurableColumnTableModel
      Returns settings definitions for the specified column index
      Specified by:
      getColumnSettingsDefinitions in interface ConfigurableColumnTableModel
      Parameters:
      index - column index
      Returns:
      column settings definitions.
    • getColumnSettings

      public Settings getColumnSettings(int index)
      Description copied from interface: ConfigurableColumnTableModel
      Returns settings for the specified column index
      Specified by:
      getColumnSettings in interface ConfigurableColumnTableModel
      Parameters:
      index - column index
      Returns:
      column settings.
    • setAllColumnSettings

      public void setAllColumnSettings(Settings[] newSettings)
      Description copied from interface: ConfigurableColumnTableModel
      Allows for the bulk setting of Settings. This prevents excessive event notification when all settings need to be changed.
      Specified by:
      setAllColumnSettings in interface ConfigurableColumnTableModel
      Parameters:
      newSettings - An array of Settings that contains Settings for each column where the index of the Settings in the array is the index of the column in the model
    • getRenderer

      public TableCellRenderer getRenderer(int index)
      Gets the special table cell renderer for the specified table field column. A null value indicates that this field uses a default cell renderer.
      Specified by:
      getRenderer in interface ConfigurableColumnTableModel
      Parameters:
      index - the model column index
      Returns:
      a table cell renderer for this field. Otherwise, null if a default renderer should be used.
    • getHeaderRenderer

      public TableCellRenderer getHeaderRenderer(int index)
      Gets the special header cell renderer for the specified table field column. A null value indicates that this column uses a default header renderer.
      Specified by:
      getHeaderRenderer in interface ConfigurableColumnTableModel
      Parameters:
      index - the model column index
      Returns:
      a table cell renderer for this field's header. Otherwise, null if a default renderer should be used.
    • getMaxLines

      public int getMaxLines(int index)
      Gets the maximum number of text display lines needed for any given cell within the specified column.
      Specified by:
      getMaxLines in interface ConfigurableColumnTableModel
      Parameters:
      index - column field index
      Returns:
      maximum number of lines needed for specified column
    • dispose

      public void dispose()
      Description copied from class: AbstractGTableModel
      Call this when the model will no longer be used
      Overrides:
      dispose in class AbstractGTableModel<ROW_TYPE>
    • disposeDynamicColumnData

      protected void disposeDynamicColumnData()