GP-2067: Implement header renderer override and add cursor to ModelProvider's Plot columns

This commit is contained in:
Dan 2022-09-21 11:28:12 -04:00
parent 45165ea167
commit cdd6f3d72e
16 changed files with 250 additions and 83 deletions

View file

@ -120,6 +120,11 @@ public abstract class AbstractDynamicTableColumn<ROW_TYPE, COLUMN_TYPE, DATA_SOU
return null;
}
@Override
public GTableHeaderRenderer getHeaderRenderer() {
return null;
}
private void configureDefaultSettings() {
defaultSettingsDefinitions = NO_SETTINGS_DEFINITIONS;
Class<COLUMN_TYPE> columnClass = getColumnClass();

View file

@ -66,4 +66,12 @@ public interface ConfigurableColumnTableModel extends TableModel {
* @return the renderer
*/
public TableCellRenderer getRenderer(int columnIndex);
/**
* Returns the header cell renderer for the given column
* @param columnIndex the index of the column
* @return the renderer
* @return
*/
public TableCellRenderer getHeaderRenderer(int columnIndex);
}

View file

@ -97,6 +97,16 @@ public interface DynamicTableColumn<ROW_TYPE, COLUMN_TYPE, DATA_SOURCE> {
*/
public GColumnRenderer<COLUMN_TYPE> getColumnRenderer();
/**
* Returns the optional header renderer for this column; null if no renderer is used.
*
* <P>
* This method allows columns to define custom header rendering.
*
* @return the renderer
*/
public GTableHeaderRenderer getHeaderRenderer();
/**
* Returns a list of settings definitions for this field.
*

View file

@ -540,6 +540,19 @@ public abstract class GDynamicColumnTableModel<ROW_TYPE, DATA_SOURCE>
return tableColumns.get(index).getColumnRenderer();
}
/**
* Gets the special header cell renderer for the specified table field column. A null value
* indicates that this column uses a default header renderer.
*
* @param index the model column index
* @return a table cell renderer for this field's header. Otherwise, null if a default renderer
* should be used.
*/
@Override
public TableCellRenderer getHeaderRenderer(int index) {
return tableColumns.get(index).getHeaderRenderer();
}
/**
* Gets the maximum number of text display lines needed for any given cell within the specified
* column.

View file

@ -692,6 +692,13 @@ public class GTable extends JTable {
addColumn(newColumn);
}
for (int i = 0; i < columnCount; i++ ) {
TableCellRenderer headerRenderer = getHeaderRendererOverride(i);
if (headerRenderer != null) {
tableColumnModel.getColumn(i).setHeaderRenderer(headerRenderer);
}
}
tableColumnModel.setEventsEnabled(wasEnabled);
}
@ -890,6 +897,26 @@ public class GTable extends JTable {
return super.getCellRenderer(row, col);
}
/**
* Performs custom work to locate header renderers for special table model types. The headers
* are located and installed at the time the table's model is set.
*
* @param row the row
* @param col the column
* @return the header cell renderer
*/
public final TableCellRenderer getHeaderRendererOverride(int col) {
ConfigurableColumnTableModel configurableModel = getConfigurableColumnTableModel();
if (configurableModel != null) {
int modelIndex = convertColumnIndexToModel(col);
TableCellRenderer renderer = configurableModel.getHeaderRenderer(modelIndex);
if (renderer != null) {
return renderer;
}
}
return null;
}
/**
* If you just begin typing into an editable cell in a JTable, then the cell editor will be
* displayed. However, the editor component will not have a focus. This method has been

View file

@ -99,6 +99,11 @@ public class MappedTableColumn<ROW_TYPE, EXPECTED_ROW_TYPE, COLUMN_TYPE, DATA_SO
return tableColumn.getColumnRenderer();
}
@Override
public GTableHeaderRenderer getHeaderRenderer() {
return tableColumn.getHeaderRenderer();
}
@Override
public SettingsDefinition[] getSettingsDefinitions() {
return tableColumn.getSettingsDefinitions();