in src/org/jetbrains/r/run/visualize/RDataFrameTablePage.kt [364:416]
fun refreshTable() {
val oldColumns = List(viewer.nColumns) { viewer.getColumnName(it) }
RPluginCoroutineScope.getApplicationScope().launch(Dispatchers.EDT + ModalityState.defaultModalityState().asContextElement()) {
val refreshed = viewer.refresh()
if (!refreshed) return@launch
val rowSorter = table.rowSorter as RDataFrameRowSorter
rowSorter.updatesSuspended = true
try {
val newColumns = List(viewer.nColumns) { viewer.getColumnName(it) }
val columnMapping = getColumnMapping(oldColumns, newColumns)
val newSortKeys = rowSorter.sortKeys.mapNotNull {
columnMapping[it.column]?.let { newColumn ->
RowSorter.SortKey(newColumn, it.sortOrder)
}
}
val newFilters = filterHeader?.let { header ->
val filters = MutableList(newColumns.size) { "" }
columnMapping.forEachIndexed { old, new ->
if (new != null) {
filters[new] = (header.getFilterEditor(old).content as? String).orEmpty()
}
}
filters
}
removeTableFilterHeader()
table.columnModel = RVisualizeTableUtil.createColumnModel(viewer)
(table.model as RDataFrameTableModel).apply {
fireTableStructureChanged()
fireTableDataChanged()
}
rowSorter.restore()
if (newFilters != null) {
addTableFilterHeader()
newFilters.forEachIndexed { index, it -> filterHeader?.getFilterEditor(index)?.content = it }
filtersHandler?.updateTableFilter()
}
rowSorter.setSortKeys(newSortKeys.takeIf { it.isNotEmpty() }?.toMutableList())
paginator?.updateShownRange()
} finally {
rowSorter.updatesSuspended = false
}
rowSorter.update()
repaint()
filterTableButton.update()
}
}