Class 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 fromgetDataSource()
. This object will be given to theDynamicTableColumn
objects used by this table model whenDynamicTableColumn.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
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 Summary
Modifier and TypeFieldDescriptionprotected Map
<DynamicTableColumn<ROW_TYPE, ?, ?>, Settings> protected ServiceProvider
protected List
<DynamicTableColumn<ROW_TYPE, ?, ?>> Fields inherited from class docking.widgets.table.AbstractSortedTableModel
hasEverSorted
Fields inherited from class docking.widgets.table.AbstractGTableModel
isDisposed, WIDTH_UNDEFINED
Fields inherited from class javax.swing.table.AbstractTableModel
listenerList
Fields inherited from interface docking.widgets.table.SortedTableModel
ASCENDING_ORDER, DESCENDING_ORDER
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
addTableColumn
(DynamicTableColumn<ROW_TYPE, ?, ?> column) Adds the given column at the end of the list of columns.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.protected void
addTableColumns
(Set<DynamicTableColumn<ROW_TYPE, ?, ?>> columns) Adds the given columns to the end of the list of columns.protected void
addTableColumns
(Set<DynamicTableColumn<ROW_TYPE, ?, ?>> columns, boolean isDefault) Adds the given columns to the end of the list of columns.protected Comparator
<ROW_TYPE> createSortComparator
(int columnIndex) An extension point for subclasses to insert their own comparator objects for their data.protected Comparator
<Object> createSortComparatorForColumn
(int columnIndex) This differs fromcreateSortComparator(int)
in that the other method creates a comparator that operates on a full row value, whereas this method operates on column values.protected abstract TableColumnDescriptor
<ROW_TYPE> void
dispose()
Call this when the model will no longer be usedprotected void
getColumn
(int index) Returns the column for the given model indexfinal Class
<?> getColumnClass
(int column) final int
getColumnDescription
(int column) getColumnDisplayName
(int columnIndex) int
getColumnIndex
(DynamicTableColumn<ROW_TYPE, ?, ?> identifier) Returns the model index for the given columnint
getColumnIndex
(Class<?> columnClass) Returns the column index of the given column classfinal String
getColumnName
(int column) getColumnSettings
(int index) Returns settings for the specified column indexgetColumnSettingsDefinitions
(int index) Returns settings definitions for the specified column indexfinal Object
getColumnValueForRow
(ROW_TYPE t, int columnIndex) Implementors are expected to return a value at the given column index for the specified row object.abstract DATA_SOURCE
Returns the table's context for the data.int
Gets the count of the default columns for this model.getHeaderRenderer
(int index) Gets the special header cell renderer for the specified table field column.int
getMaxLines
(int index) Gets the maximum number of text display lines needed for any given cell within the specified column.int
getPreferredColumnWidth
(int column) getRenderer
(int index) Gets the special table cell renderer for the specified table field column.protected TableColumnDescriptor
<ROW_TYPE> getUniqueIdentifier
(int column) Returns a value that is unique for a given table column.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).boolean
isSortable
(int columnIndex) Returns true if the specified columnIndex is sortable.boolean
isVisibleByDefault
(int modelIndex) 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.protected void
protected void
Allows clients to defer column creation until after this parent class's constructor has been called.protected void
removeTableColumn
(DynamicTableColumn<ROW_TYPE, ?, ?> column) Removes the given column from this modelprotected void
removeTableColumns
(Set<DynamicTableColumn<ROW_TYPE, ?, ?>> columns) Removes the given columns from this model.void
setAllColumnSettings
(Settings[] newSettings) Allows for the bulk setting of Settings.void
Callback when column settings have changedMethods inherited from class docking.widgets.table.AbstractSortedTableModel
addSortListener, cleanupTableSortState, createSortingContext, fireTableChanged, getIndexForRowObject, getIndexForRowObject, getPendingSortState, getPrimarySortColumnIndex, getRowIndex, getRowObject, getTableSortState, getValueAt, initializeSorting, isSorted, isSortPending, notifyModelSorted, reSort, setDefaultTableSortState, setTableSortState, sort, sortCompleted
Methods inherited from class docking.widgets.table.AbstractGTableModel
getLastSelectedObjects, getRowCount, isDisposed, refresh, setLastSelectedObjects
Methods inherited from class javax.swing.table.AbstractTableModel
addTableModelListener, findColumn, fireTableCellUpdated, fireTableDataChanged, fireTableRowsDeleted, fireTableRowsInserted, fireTableRowsUpdated, fireTableStructureChanged, getListeners, getTableModelListeners, isCellEditable, removeTableModelListener, setValueAt
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface docking.widgets.table.RowObjectTableModel
fireTableDataChanged, getModelData, getName, getRowIndex, getRowObject
Methods inherited from interface javax.swing.table.TableModel
addTableModelListener, getRowCount, getValueAt, isCellEditable, removeTableModelListener, setValueAt
-
Field Details
-
serviceProvider
-
tableColumns
-
columnSettings
-
-
Constructor Details
-
GDynamicColumnTableModel
-
-
Method Details
-
createTableColumnDescriptor
-
isSortable
public boolean isSortable(int columnIndex) Description copied from interface:SortedTableModel
Returns true if the specified columnIndex is sortable.- Specified by:
isSortable
in interfaceSortedTableModel
- 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
-
createSortComparator
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 classAbstractSortedTableModel<ROW_TYPE>
- Parameters:
columnIndex
- the column index- Returns:
- the comparator
-
createSortComparatorForColumn
This differs fromcreateSortComparator(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
Callback when column settings have changed- Specified by:
stateChanged
in interfaceChangeListener
-
addTableColumn
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
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
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 addisDefault
- 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
Removes the given column from this model- Parameters:
column
- the column to remove
-
removeTableColumns
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 firstn
columns of this model in order to get information for the default columns by calling methods likeTableModel.getColumnName(int)
.- Specified by:
getDefaultColumnCount
in interfaceVariableColumnTableModel
- 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 interfaceVariableColumnTableModel
- 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 interfaceVariableColumnTableModel
- 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 interfaceTableModel
-
getColumnClass
- Specified by:
getColumnClass
in interfaceTableModel
- Overrides:
getColumnClass
in classAbstractTableModel
-
getColumnName
- Specified by:
getColumnName
in interfaceTableModel
- Overrides:
getColumnName
in classAbstractTableModel
-
getPreferredColumnWidth
public int getPreferredColumnWidth(int column) - Overrides:
getPreferredColumnWidth
in classAbstractGTableModel<ROW_TYPE>
-
getColumnDisplayName
- Specified by:
getColumnDisplayName
in interfaceVariableColumnTableModel
-
getColumnDescription
- Specified by:
getColumnDescription
in interfaceVariableColumnTableModel
-
getUniqueIdentifier
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 interfaceVariableColumnTableModel
- Parameters:
column
- the index (in the model space) of the column for which to get the identifier
-
getColumnValueForRow
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 theTableModel.getValueAt(int, int)
that allows this class's comparator objects to work.- Specified by:
getColumnValueForRow
in interfaceRowObjectTableModel<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
Returns the table's context for the data.- Returns:
- the table's context for the data.
-
getColumnIndex
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
Description copied from interface:DynamicColumnTableModel
Returns the model index for the given column- Specified by:
getColumnIndex
in interfaceDynamicColumnTableModel<ROW_TYPE>
- Parameters:
identifier
- the column- Returns:
- the model index
-
getColumn
Description copied from interface:DynamicColumnTableModel
Returns the column for the given model index- Specified by:
getColumn
in interfaceDynamicColumnTableModel<ROW_TYPE>
- Parameters:
index
- the model index of the column (this can differ from the view index)- Returns:
- the column
-
getColumnSettingsDefinitions
Description copied from interface:ConfigurableColumnTableModel
Returns settings definitions for the specified column index- Specified by:
getColumnSettingsDefinitions
in interfaceConfigurableColumnTableModel
- Parameters:
index
- column index- Returns:
- column settings definitions.
-
getColumnSettings
Description copied from interface:ConfigurableColumnTableModel
Returns settings for the specified column index- Specified by:
getColumnSettings
in interfaceConfigurableColumnTableModel
- Parameters:
index
- column index- Returns:
- column settings.
-
setAllColumnSettings
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 interfaceConfigurableColumnTableModel
- 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
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 interfaceConfigurableColumnTableModel
- Parameters:
index
- the model column index- Returns:
- a table cell renderer for this field. Otherwise, null if a default renderer should be used.
-
getHeaderRenderer
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 interfaceConfigurableColumnTableModel
- 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 interfaceConfigurableColumnTableModel
- 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 classAbstractGTableModel<ROW_TYPE>
-
disposeDynamicColumnData
protected void disposeDynamicColumnData()
-