*/
private void updateColumnFromStateChangeEvent(GridColumnState columnState) {
CustomGridColumn column = columnIdToColumn.get(columnState.id);
+
+ columnsUpdatedFromState = true;
updateColumnFromState(column, columnState);
-
- if (columnState.rendererConnector != column.getRendererConnector()) {
- throw new UnsupportedOperationException(
- "Changing column renderer after initialization is currently unsupported");
- }
+ columnsUpdatedFromState = false;
}
/**
column.setMaximumWidth(state.maxWidth);
column.setExpandRatio(state.expandRatio);
+ assert state.rendererConnector instanceof AbstractRendererConnector : "GridColumnState.rendererConnector is invalid (not subclass of AbstractRendererConnector)";
+ column.setRenderer((AbstractRendererConnector<Object>) state.rendererConnector);
+
column.setSortable(state.sortable);
+
+ column.setHidden(state.hidden);
+ column.setHidable(state.hidable);
+
column.setEditable(state.editable);
column.setEditorConnector((AbstractFieldConnector) state.editorConnector);
}
final double widthFixed = Math.max(widthAsIs,
column.getMinimumWidth());
defaultExpandRatios = defaultExpandRatios
- && column.getExpandRatio() == -1;
+ && (column.getExpandRatio() == -1 || column == selectionColumn);
if (isFixedWidth) {
- columnSizes.put(indexOfColumn(column), widthFixed);
+ columnSizes.put(visibleColumns.indexOf(column), widthFixed);
reservedPixels += widthFixed;
} else {
nonFixedColumns.add(column);
}
columns = newOrder;
+ List<Column<?, T>> visibleColumns = getVisibleColumns();
+
// Do ComplexRenderer.init and render new content
- conf.insertColumns(0, columns.size());
+ conf.insertColumns(0, visibleColumns.size());
+ // Number of frozen columns should be kept same #16901
+ updateFrozenColumns();
+
// Update column widths.
for (Column<?, T> column : columns) {
column.reapplyWidth();